2017-10-19 155 views
0

列舉理解枚舉只有當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

這只是一個玩具的例子,但我想要一個字典理解,其中的值增加而不跳過數字索引的關鍵。下面的答案都提供了實現我所需要的好方法。 –

回答

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

如何把一個列表理解(發電機)列表解析裏?

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

輸出:

[0, 1] 
+0

嗯..也許不是你要求的,如果你想處理沒有價值 –