我想比較2個迭代列表並打印出現在兩個迭代列表中的項目。if語句的列表理解
>>> a = ('q', 'r')
>>> b = ('q')
# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
^
但它給我哪裏^
已經放在一個無效的語法錯誤。 這個lamba函數有什麼問題?
我想比較2個迭代列表並打印出現在兩個迭代列表中的項目。if語句的列表理解
>>> a = ('q', 'r')
>>> b = ('q')
# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
^
但它給我哪裏^
已經放在一個無效的語法錯誤。 這個lamba函數有什麼問題?
您的訂單有誤。該if
應該是for
後(除非它是一個if-else
三元運算符)
[y for y in a if y not in b]
但這會工作:
[y if y not in b else other_value for y in a]
謝謝。我看到這篇文章http://stackoverflow.com/questions/4406389/if-else-in-a-list-comprehension關於lambda函數中的if else語句。我認爲只使用if語句(沒有else)會以相同的順序工作。 – OrangeTux 2013-03-18 10:51:18
這不是一個lambda函數。這是一個列表理解。
只要改變順序:
[ y for y in a if y not in b]
當然。笨。 – OrangeTux 2013-03-18 10:54:55
你把if
底:
[y for y in a if y not in b]
列表理解寫在相同的順序它們的嵌套全指定的同行,基本上是以上聲明轉換爲:
outputlist = []
for y in a:
if y not in b:
outputlist.append(y)
您的版本試圖做到這一點,而不是:
outputlist = []
if y not in b:
for y in a:
outputlist.append(y)
但列表理解必須至少一個外環開始。
你一直很有幫助。謝謝。 – 2017-08-21 08:18:47
列表理解的公式:
[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]
因此,你可以像這樣做:
[y for y in a if y not in b]
僅用於演示目的: [Y如果y不是在b,否則假y的在]
你不能在列表理解中放置一個'else',而不是至少放置一個。不要將列表理解(過濾)與條件表達式(必須具有值,使else表達式爲必需)混淆。 – 2017-06-20 06:00:21
同意。儘管如代碼所示,'else'可用於列表理解。 – 2017-06-21 11:43:49
這是一個*條件表達式*。它可以用在有效表達式適用的任何地方。它沒有具體的列舉理解。 – 2017-06-21 11:45:34
下面所有的答案是正確的,但也'B =(「Q」)'不創建一個元組。帶有一個元素的元組需要一個明確的',',也就是'b =('q',)' – dmg 2013-03-18 10:48:58
我已經將元組更改爲'iterables'。 – OrangeTux 2013-03-18 11:03:38