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

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

问题描述:

列举理解枚举只有当if语句为True时才有枚举的方法吗?Python枚举使用列表理解和如果语句

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

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

我也试过以下,但你不能使用通在列表解析里像下面。

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

我看到一些答案,但我不知道我知道你想要的是什么ouptut。你能给出一个你想要的样本输出吗? – RobertB

+0

这只是一个玩具的例子,但我想要一个字典理解,其中的值增加而不跳过数字索引的关键。下面的答案都提供了实现我所需要的好方法。 –

有。一个简单的方法是使用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] 
+0

嗯..也许不是你要求的,如果你想处理没有价值 –