您必须生成索引,然后使用列表推导来选择所有与这些索引不匹配的值。使用range()对象作为一种有效的方法来测试索引(xrange()在 python 2 中):
indices = range(offset, len(a), step)
[v for i, v in enumerate(a) if i not in indices]
Python 3 中的range()对象(xrange()在 Python 2 中)仅包含 start、end 和 step 值,in如果测试值是范围的一部分,则测试只需进行快速计算。
演示:
>>> a = [0, 1, 2, 3, 4, 5, 6]
>>> offset, step = 1, 3
>>> indices = range(offset, len(a), step)
>>> indices
range(1, 7, 3)
>>> [v for i, v in enumerate(a) if i not in indices]
[0, 2, 3, 5, 6]
是的,这仍然需要使用if语句,但是测试很便宜,并且可以根据需要合并到生成器表达式中:
for i in (v for i, v in enumerate(a) if i not in range(offset, len(a), step)):