data-structures append指令 list函數 - Python中追加與擴展列表方法的區別
append
將一個元素添加到列表中,並將第一個列表與另一個列表(或另一個可列表,不一定是列表)連接起來。
>>> li = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li.append("new")
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', 'new']
>>> li.append(["new", 2])
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', ['new', 2]]
>>> li.insert(2, "new")
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new']
>>> li.extend(["two", "elements"])
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
從Dive到Python 。
列表方法append()
和extend()
之間有什麼區別?
append
附加一個元素。 extend
附加元素列表。
請注意,如果您傳遞列表以追加,它仍會添加一個元素:
>>> a = [1, 2, 3]
>>> a.append([4, 5, 6])
>>> a
[1, 2, 3, [4, 5, 6]]
append()方法將單個項添加到列表的末尾。
x = [1, 2, 3]
x.append([4, 5])
x.append('abc')
print(x)
# gives you
[1, 2, 3, [4, 5], 'abc']
extend()方法接受一個參數,一個列表,並將參數的每個項追加到原始列表中。 (列表實現為類。“創建”列表實際上是實例化類。因此,列表具有對其進行操作的方法。)
x = [1, 2, 3]
x.extend([4, 5])
x.extend('abc')
print(x)
# gives you
[1, 2, 3, 4, 5, 'a', 'b', 'c']
追加與擴展
使用append,您可以附加一個擴展列表的元素:
>>> a = [1,2]
>>> a.append(3)
>>> a
[1,2,3]
如果要擴展多個元素,則應使用extend,因為您只能附加一個元素或一個元素列表:
>>> a.append([4,5])
>>> a
>>> [1,2,3,[4,5]]
這樣你就可以得到一個嵌套列表
相反,使用擴展,您可以像這樣擴展單個元素
>>> a = [1,2]
>>> a.extend([3])
>>> a
[1,2,3]
或者,與append不同,一次擴展更多元素而不將列表嵌套到原始列表中(這就是名稱擴展的原因)
>>> a.extend([4,5,6])
>>> a
[1,2,3,4,5,6]
使用兩種方法添加一個元素
附加1個元素
>>> x = [1,2]
>>> x.append(3)
>>> x
[1,2,3]
延伸一個元素
>>> x = [1,2]
>>> x.extend([3])
>>> x
[1,2,3,4]
添加更多元素......具有不同的結果
如果對多個元素使用append,則必須將元素列表作為參數傳遞,然後您將獲得NESTED列表!
>>> x = [1,2]
>>> x.append([3,4])
>>> x
[1,2,[3,4]]
使用extend,您可以將列表作為參數傳遞,但是您將獲得一個列表,其中包含未嵌套在舊元素中的新元素。
>>> z = [1,2]
>>> z.extend([3,4])
>>> z
[1,2,3,4]
因此,使用更多元素,您將使用extend來獲取包含更多項的列表。 您將使用append,將更多元素附加到列表中,但是一個元素是嵌套列表,您可以在代碼的輸出中清楚地看到。
extend()
可以與迭代器參數一起使用。 這是一個例子。 您希望以這種方式從列表列表中列出一個列表:
從
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
你要
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
您可以使用itertools.chain.from_iterable()
來執行此操作。 此方法的輸出是迭代器。 它的實現相當於
def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
for it in iterables:
for element in it:
yield element
回到我們的例子,我們可以做到
import itertools
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
merged = list(itertools.chain.from_iterable(list2d))
並獲得通緝名單。
以下是如何extend()
與iterator參數一起使用:
merged = []
merged.extend(itertools.chain.from_iterable(list2d))
print(merged)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
append() :它基本上用於Python中添加一個元素。
例1:
>> a = [1, 2, 3, 4]
>> a.append(5)
>> print(a)
>> a = [1, 2, 3, 4, 5]
例2:
>> a = [1, 2, 3, 4]
>> a.append([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, [5, 6]]
extend() :其中extend()用於合併兩個列表或在一個列表中插入多個元素。
例1:
>> a = [1, 2, 3, 4]
>> b = [5, 6, 7, 8]
>> a.extend(b)
>> print(a)
>> a = [1, 2, 3, 4, 5, 6, 7, 8]
例2:
>> a = [1, 2, 3, 4]
>> a.extend([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, 5, 6]
Append一次添加整個數據。 整個數據將添加到新創建的索引中。 另一方面,正如其名稱所示,擴展擴展當前數組。
例如
list1 = [123, 456, 678]
list2 = [111, 222]
隨著append
我們得到:
result = [123, 456, 678, [111, 222]]
在extend
我們得到:
result = [123, 456, 678, 111, 222]
我希望我能對這個問題作出有益的補充。 如果您的列表存儲特定類型對象,例如Info
,則這是一種不適合使用extend
方法的情況:在for
循環中並且每次生成Info
對象並使用extend
其存儲到列表中時,它將失敗。 例外情況如下:
TypeError:'Info'對像不可迭代
但是如果使用append
方法,結果就可以了。 因為每次使用extend
方法時,它總是將其視為列表或任何其他集合類型,迭代它,並將其放在上一個列表之後。 顯然,特定對象無法迭代。
方法“append”將其參數作為單個元素添加到列表中,而“extend”獲取列表並添加其內容。
例如,
延伸
letters = ['a', 'b']
letters.extend(['c', 'd'])
print(letters) # ['a', 'b', 'c', 'd']
附加
letters.append(['e', 'f'])
print(letters) # ['a', 'b', 'c', 'd', ['e', 'f']]
這有助於我了解使用append
和extend
時發生的事情:
a = [[1,2,3],[4,5,6]]
print(a)
>>> [[1, 2, 3], [4, 5, 6]]
a.append([6,7,8])
print(a)
>>> [[1, 2, 3], [4, 5, 6], [6, 7, 8]]
a.extend([0,1,2])
print(a)
>>> [[1, 2, 3], [4, 5, 6], [6, 7, 8], 0, 1, 2]
a=a+[8,9,10]
print(a)
>>> [[1, 2, 3], [4, 5, 6], [6, 7, 8], 0, 1, 2, 8, 9, 10]
append
“擴展”列表(就地) 只有一個項目 ,單個對像傳遞(作為參數)。
extend
“擴展”列表(就地)與傳遞的對象(作為參數)包含的項目一樣多 。
對於str
對象,這可能會有些混亂。
- 如果您傳遞一個字符串作為參數:
append
將在append
添加一個字符串項,但extend
將添加與該字符串的長度一樣多的“單個”'str'項。 - 如果您將一個字符串列表作為參數傳遞:
append
仍將在append
添加一個“list”項,並且extend
將添加與傳遞列表的長度一樣多的“list”項。
def append_o(a_list, element): a_list.append(element) print('append:', end = ' ') for item in a_list: print(item, end = ',') print() def extend_o(a_list, element): a_list.extend(element) print('extend:', end = ' ') for item in a_list: print(item, end = ',') print() append_o(['ab'],'cd') extend_o(['ab'],'cd') append_o(['ab'],['cd', 'ef']) extend_o(['ab'],['cd', 'ef']) append_o(['ab'],['cd']) extend_o(['ab'],['cd'])
生產:
append: ab,cd,
extend: ab,c,d,
append: ab,['cd', 'ef'],
extend: ab,cd,ef,
append: ab,['cd'],
extend: ab,cd,
append()方法將添加傳遞給它的參數作為單個元素。
extend()將迭代傳遞的參數並通過傳遞迭代的每個元素來擴展列表,基本上它將添加多個元素而不是將整體添加為一個。
list1 = [1,2,3,4,5]
list2 = [6,7,8]
list1.append(list2)
print(list1)
#[1,2,3,4,5,[6,7,8]]
list1.extend(list2)
print(list1)
#[1,2,3,4,5,6,7,8]