2013-08-27 133 views
1

好Python列表,我可以很容易地在Python中使用此代碼沒有錯誤:不分配變量

>>>> a = range(5, 10) 
>>>> b = range(15, 20) 
>>>> a.extend(b) 
>>>> a 
[5, 6, 7, 8, 9, 15, 16, 17, 18, 19] 

我也可以用這種方法,不使用b

>>>> a = range(5, 10) 
>>>> a.extend(range(15, 20)) 
>>>> a 
[5, 6, 7, 8, 9, 15, 16, 17, 18, 19] 

但我可以」牛逼弄清楚爲什麼同樣的事情不會在這種情況下發生:

>>>> [5, 6, 7, 8, 9].extend(range(15, 20)) 
>>>> 

是不是a小號與上面的列表不一樣嗎?我只看到差異,我硬編碼的國家。我真的可以理解的是,雖然它不是一個變量或東西硬編碼的列表不能修改,但是......

>>>> [5, 6, 7, 8, 9][2] 
7 

這令我感到奇怪。什麼是更奇怪:

>>>> [5, 6, 7, 8, 7].count(7) 
2 
>>>> [5, 6, 7, 8, 7].index(8) 
3 

爲什麼一些列表方法上的硬編碼/不IN-A-變量列表的工作,而其他人可以嗎?

我並沒有真正使用這個,這更多的是個人的知識和對語言的理解,而不是實用性。

回答

6
  1. extend沒有返回值。因此,打印a.extend(b)將是None。因此,如果您有a = [5, 6, 7, 8, 9].extend(range(15, 20))並且打印a它將顯示None。解決方法是連接列表a = [5, 6, 7, 8, 9] + range(15, 20)

  2. [5, 6, 7, 8, 9][2] - 一切都應該像它開始從0開始計算元素一樣。它不是修改列表,它只是返回列表中的某個元素。

  3. [5, 6, 7, 8, 7].count(7)[5, 6, 7, 8, 7].index(8)顯示預期的輸出。第一個是列表中出現7次的次數,第二個是8的索引(再次從0開始計數)。

因此,硬編碼列表的所有使用行爲與您所生成的所有示例中的預期行爲相同。

+0

嗯我明白。是否有任何理由爲'a.extend(b)'除了擴展它外不返回結果列表?例如,我覺得使用'a = [5,6,7,8,9] .extend(範圍(15,20))'很有用。 – ranisalt

+1

@ranisalt [5,6,7,8,9] +範圍(15,20)將做你想做的事 – sashkello

+1

它不返回任何東西,因爲它是列表上的一個操作。當您執行'a.extend'時,您將元素附加到'a'。從概念上講,讓這個操作做兩件事會很糟糕 - 返回擴展列表並擴展傳遞的列表。 – sashkello