列表理解的一般形式可以理解這樣
[(the task to be done) (how long it has to be done)]
我們通常使用for
循環中的需要多長時間才能完成部分和要完成的任務部分也可以有if
條件。 重要的是要注意的是,要完成的任務部分應該返回一個有效的值(即使None
是一個有效的值)。因此,您不能在列表理解中使用任何Python語句(return
,在Python 2.x print
等中)。
現在回答你的第一個問題,
['a' if r == c else 'b' for c in range(3) for r in range(3)]
# ['a', 'b', 'b', 'b', 'a', 'b', 'b', 'b', 'a']
這正是造成如您在顯示for循環的版本列表。
'a' if r == c else 'b'
這是相同
if r == c:
'a'
else:
'b'
首先,for c in range(3)
將被執行,並且將生成的列表[0, 1, 2]
,然後在每次迭代for r in range(3)
將被執行,將產生該列表[0, 1, 2]
。在r
的每次迭代中,我們將執行上面看到的if條件,並且將使用該if..else
的結果作爲正在生成的新列表的元素。
要回答你的第二個問題,你可以很好地使用列表理解。
從上面的例子我們的基本理解是,列表理解是生成一個列表。現在,讓我們嘗試和巢列表理解(我們將使用列表中理解的任務做部分),這樣
[['a' if r == c else 'b' for r in range(3)] for c in range(3)]
# [['a', 'b', 'b'], ['b', 'a', 'b'], ['b', 'b', 'a']]
現在,如果你看看我們的嵌套列表理解,第一,for c in range(3)
將被執行,然後['a' if r == c else 'b' for r in range(3)]
部分將被執行,這將生成嵌套列表的單獨行。這裏需要注意的是,c
在嵌套列表理解中可用。
可以說我希望我的列表由子列表組成,我將範圍設置爲3,因此每個子列表中包含3個元素。那也可以加入列表理解嗎? –
@HayleyvanWaas您能否在實際問題中也包括這個問題,並請示例輸入和輸出解釋? – thefourtheye
@HayleyvanWaas請檢查我的更新回答。 – thefourtheye