2014-11-24 47 views
0

我是Python新手,正在自學。將列表1擴展到第二個列表

我有兩個列表,我試圖使用擴展功能的list2list1追加的內容:

list1 = ['c', 'cpp', 'python', 123, 456] 

list2 = [10, 20, 30, 10, 40, 50, 10] 

list3 = list1.extend(list2) 

print list3 

這使輸出爲:None

然而,當我刪除list3只需使用:

list1.extend(list2) 

print list1 

it gi VES的輸出:

['c', 'cpp', 'python', 123, 456, 2014, 10, 20, 30, 10, 40, 50, 10]

這是爲什麼? list3有什麼不同,它不會提供與I print list1相同的順序?

+0

你回顧下面的答案,找到了一個能夠滿足您的需求? – 2014-11-24 06:01:39

回答

0

你得到None因爲那是什麼extend是專門用來做的。關於Python的好處之一是它是一種自我記錄的語言,可以爲您提供有關如何使用其內置函數的信息。

在你的Python解釋器中試試這個。做一個清單:

mammals = ['aardvark', 'bear', 'cat'] 

現在寫下如下,沒有括號或任何東西。正是如此:

mammals.extend 

Python解釋器打印出mammals.extend。不是致電extend的結果,而是extend本身的值。

<built-in method extend of list object at 0x102939fc8> 

這是extend的字符串表示形式。我們可以看到這是附加到列表的方法。

現在做到這一點:

print(mammals.extend.__doc__) 

你會得到一個不錯的文檔字符串。所有內置方法都有一個__doc__屬性,您可以在不確定工作方式時打印出來。

在這種情況下,你會看到你的問題的答案。

L.extend(iterable) -> None -- extend list by appending elements from the iterable 

這就告訴我們,在調用extend的結果是None

當你寫的功能,您可以使自己的文檔字符串。把你的簡要文檔放到函數第一行的一個字符串中,當你或其他人使用你的代碼在你的函數上調用__doc__時,這個字符串會神奇地返回。就像這樣:

def double(s): 
    """double(s): Returns the concatenation of the string with itself.""" 
    return s+s 

double("banana")  # Test our new function. 
print(double.__doc__) # Get the doc string. 

你可能對一個空字符串調用extend,順便說一句:

print([].extend.__doc__) 

這會給你同樣的文檔字符串,因爲extend是每一個列表的方法。

如果要粘合兩個列表一起,做到以下幾點。

mammals = ['aardvark', 'bear', 'cat'] 
more_mammals = ['dog', 'elephant', 'giraffe'] 
all_mammals = mammals + more_mammals 
print(all_mammals) 

可以使用+=操盤extend。這條線:

mammals += more_mammals 

具有與該行相同的效果:

mammals.extend(more_mammals) 

小心像+=該修改的列表操作。這可能並不總是你想要的。

爲了保持名單,因爲他們,做一個新的列表與+,連接操作符,就像我們前面看到的。

all_mammals = mammals + more_mammals 

如果你不關心的mammals舊值和你真的想將其與延伸,繼續使用+=

1

我想你需要的是

list3 = list1 + list2 

extend修改原始列表1,它不返回任何