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)]
答
有。一个简单的方法是使用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
嗯..也许不是你要求的,如果你想处理没有价值 –
我看到一些答案,但我不知道我知道你想要的是什么ouptut。你能给出一个你想要的样本输出吗? – RobertB
这只是一个玩具的例子,但我想要一个字典理解,其中的值增加而不跳过数字索引的关键。下面的答案都提供了实现我所需要的好方法。 –