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