data-structures append指令 list函數 - Python中追加與擴展列表方法的區別





12 Answers

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

list教學 python建立list array新增

列表方法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']

Dive Into Python




追加與擴展

使用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']]



這有助於我了解使用appendextend時發生的事情:

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對象,這可能會有些混亂。

  1. 如果您傳遞一個字符串作為參數: append將在append添加一個字符串項,但extend將添加與該字符串的長度一樣多的“單個”'str'項。
  2. 如果您將一個字符串列表作為參數傳遞: 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]



Related