我知道下面的代碼是有效的:如果沒有別的 - Python列表
list = [1 , 2 if 1==1 else 0, 3]
,但我怎麼能忽略列表中插入如果如果表達式(1 == 1在這種情況下)返回false?
我的意思是,我不希望插入的任何值(包括「無」,「[]」),如果表達式無效。
我想是這樣的
list = [1 , 2 if 1==1, 3]
,但它不工作。
我知道下面的代碼是有效的:如果沒有別的 - Python列表
list = [1 , 2 if 1==1 else 0, 3]
,但我怎麼能忽略列表中插入如果如果表達式(1 == 1在這種情況下)返回false?
我的意思是,我不希望插入的任何值(包括「無」,「[]」),如果表達式無效。
我想是這樣的
list = [1 , 2 if 1==1, 3]
,但它不工作。
以任選地包括在列表中的項目,你就必須打破分配到幾個部分:
l = [1] + ([2] if 1 else []) + [3]
(括號可能是可選的,但也不能傷害,我不。確保條件表達式有什麼優先)
這是寫作的一小段路
if 1:
l = [1] + [2] + [3] # Which is just [1,2,3]
else:
l = [1] + [] + [3] # Which is just [1,3]
在文字必須存在一個列表中指定的任何元素;沒有辦法在Python中編寫可能不存在的項目。
如果你熟悉Perl,類似東西可能的,但僅僅是因爲Perl有非常不同的語義。
比較分配
@list = (1, 0 ? 2 :(), 3)
將產生列表(1, 3)
因爲(1,(), 3)
被解釋爲3所列出(1,),(), and (3,)
串聯,部分原因是因爲你不能其他列表裏面嵌套列表。另一方面
@list = (1, 1 ? 2 :(), 3)
產生列表(1, 2, 3)
。
這是比接受的更好的答案,因爲它實際上解決了問題。 +1 – Shashank 2014-09-10 21:10:53
你不能這樣用,因爲你正在用三個值定義一個文字列表。通過在括號之間放置兩個逗號和三個表達式,您已經承諾在列表中提供三個元素。如果沒有評估某些東西,就沒有辦法表達「消失」。
在實際列表理解,您可以通過將if
的for
子句中,而不是在目標表達式做到這一點:
>>> x = [1, 2, 3, 4]
>>> [a if a != 3 else 'three' for a in x]
[1, 2, 'three', 4]
>>> [a for a in x if a != 3]
[1, 2, 4]
首先理解使用條件表達式a if a != 3 else 'three'
,其中必須有既有if
和else
部分,因爲表達式必須評估爲某個值。第二種理解使用if a !=3
,因爲它是列表理解語法的一部分;它不是條件表達式的一部分,在這種情況下不能包含else
。它的工作就是簡單地將x
中的哪些值分配給a
,而不是評估本身的值。
Downvoter請留下評論 – almanegra 2014-09-10 20:36:56
請注意,你有什麼不是列表理解,它只是一個普通的列表。 – BrenBarn 2014-09-10 20:37:38
如何在沒有'else'的情況下完成任務?此外,這與列表無關。 – agconti 2014-09-10 20:39:16