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

时间:2017-10-19 00:14:37

标签: python if-statement list-comprehension enumeration

有没有办法在列表推导中枚举枚举只在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)]

2 个答案:

答案 0 :(得分:2)

有。一种简单的方法是使用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)

答案 1 :(得分:1)

如何将列表理解(生成器)放入列表推导中?

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

输出:

[0, 1]