Python 使用列表理解和 If 语句的枚举

Python Enumeration Using List Comprehension and If Statement

有没有一种方法可以在列表理解中进行枚举,其中枚举仅在 if 语句为 True 时递增?

例如下面的代码枚举了if语句是True还是False,我想有一个连续的索引。

my_list = [0,1,2] [i for i, w in enumerate(my_list) if w != 1]

我也尝试了以下方法,但是您不能像下面这样在列表理解中使用 pass。

[i if w != 1 else pass for i, w in enumerate(my_list)]

有。一种简单的方法是使用 itertools.count:

>>> from itertools import count
>>> c = count(0)
>>> my_list = [0,1,2]
>>> [next(c) for w in my_list if w != 1]
[0, 1]

但是:这涉及列表理解内的状态更改,这只是……不好。请注意,如果您 运行 再次理解,这将产生不幸的影响:

>>> [next(c) for w in my_list if w != 1]
[2, 3]
>>> [next(c) for w in my_list if w != 1]
[4, 5]

相反,我会做类似的事情:

>>> range(sum(w != 1 for w in my_list))
range(0, 2)

在列表推导中加入一个列表推导(生成器)如何?

my_list = [0,1,2]
[i for i, w in enumerate((_ for _ in my_list if _ != 1)) ]

输出:

[0, 1]