Python 列表 - 返回列表中已知子字符串之前的第 n 个元素的列表

Python Lists - Return list of every nth element before known substring in a list

提问人:Kankan2000 提问时间:10/6/2023 最后编辑:RomanPerekhrestKankan2000 更新时间:10/6/2023 访问量:37

问:

我有一个这样的数组:

['6.00', '1.85', 'X', '2.25', '1.26', 'X', '6.50', '1.80', 'X', '6.50', '1.95', 'X', '34.00', '5.50']

有谁知道我如何在“X”之前返回每个 3 个元素的数组?

['6.00', '2.25', '6.50', '6.50']

我一直在通过以下代码删除每个第 2 个和第 3 个元素,但是当列表中最后一个“X”之后有更多元素或“X”不均匀分布时,它就会中断:

data = ['6.00', '1.85', 'X', '2.25', '1.26', 'X', '6.50', '1.80', 'X', '6.50', '1.95', 'X', '34.00', '5.50']
x = np.array(data)
x = np.delete(x, np.arange(1, x.size, 3))
x = np.delete(x, np.arange(1, x.size, 2))
python 列表 numpy

评论


答:

2赞 RomanPerekhrest 10/6/2023 #1

通过使用位置偏移(由 np.nonzero 找到),其中:x == 'X'

x[np.nonzero(x == 'X')[0] - 2]

array(['6.00', '2.25', '6.50', '6.50'], dtype='<U5')

评论

1赞 mozway 10/6/2023
只有一个缺点,如果你在第一场比赛之前没有足够的元素,你会得到负值并切出一个不正确的位置。为了避免这种用法和 .(否则不错)idx = np.nonzero(x == 'X')[0] - 2x[idx[idx>0]]