2015-11-17 54 views
-2
print ([ 2 ∗ [ k ] for k in range (3) ] [ 2 ] [ 1 ]) 

以上代碼的輸出是什麼?爲什麼是輸出IM很迷茫,不知道如何去解決它迭代的輸出是什麼

+0

似乎有一些語法錯誤 –

+0

'*'字符不是通常的'*'字符。只是改變這一點 –

回答

1

讓做一步一步來:

1) 你有一個列表理解,看起來像這樣:

[ 2 ∗ [ k ] for k in range (3) ] 

這真的只是意味着:

創建:2 * [k]爲每個項目krange(3)這僅僅是一個喜歡對象列表,它包含整數從0-3(不包括3,包括0)。 2*[k]是說繁殖只由k 2列表,以便2*[1] == [1,1]

所以,print([ 2 ∗ [ k ] for k in range (3) ])會給你:

>>> print([2*[k] for k in range(3)]) 
[[0, 0], [1, 1], [2, 2]] 

2),那麼你只是子腳本與l[2][1]列出這意味着get the item at index 1 from the item at index 2 (即,一個雙列表的切片)。這是有效的,因爲你從上面嵌套了列表。

因此,如果此子列表爲2,則列表中索引2處的項目爲[2,2],索引1處的項目爲2

因此:

>>> print ([ 2 * [ k ] for k in range (3) ] [ 2 ] [ 1 ]) 
2 
0

讓我們從基礎開始。你有

[2 * [k] for k in range(3)] 
== [2*[0], 2*[1], 2*[2]] 
== [[0,0], [1,1], [2,2]] 

[[0,0],[1,1],[2,2]] [2] = [2,2] 

[2,2][1] = 2 

所以

print([ 2 ∗ [k] for k in range(3) ][ 2 ][ 1 ]) 

輸出(當你解決這個星號是爲Python解析合適的字符):

2 

如果這一切對你來說看起來像是黑魔法,你可能想嘗試看看here更多的列表解析。