2015-06-27 27 views
4

給出一個列表例如當條件非布爾值時,如何在列表理解中使用「else」?

a = ["No", 1, "No"] 

我想將其轉換爲一個新的列表(或者其實只是重新分配列表),使得每一個「不」被轉換成0例如

[0,1,0] 

如果我嘗試以下列表理解:

[0 for i in a if i =="No"] 

這顯然導致,並且省略每一個元素,是不是「否」

[0,0] 

如果我按照領導名單給定here並嘗試:

[0 if "No" else i for i in a] 

這給了我:

[0, 0, 0] 

我猜這是因爲「沒有」等同於True

我對列表理解中if/else的用法有什麼誤解?

+1

還相關:[不一致的理解語法?](https://stackoverflow.com/q/20025280) –

回答

4

使它成爲一個布爾表達式使用==操作

>>> a = ["No", 1, "No"] 
>>> [0 if i == "No" else i for i in a] 
[0, 1, 0] 

或者另一種方式是

>>> [[0, i][i != "No"] for i in a] 
[0, 1, 0] 

這工作,因爲i != "No"返回一個布爾值,可隨後解釋爲1爲True和0爲虛假。這然後用於訪問該列表中的特定元素[0, i]

+2

或'[int(i!=「No」 )爲我在''或'[[1,0] [我==「否」]爲我在']') –

+1

呵呵。好戲@Padraic。但OP想要在原始列表中打印該項目,因此無法在此處使用它。 :( –

+2

我想''[[0,i] [i!=「不」)]我應該去做竅門 –