Python的列表方法append和extend有什么区别?

3111

append()extend()这两个列表方法有什么不同?

20个回答

23

这相当于使用 + 运算符的 appendextend

>>> x = [1,2,3]
>>> x
[1, 2, 3]
>>> x = x + [4,5,6] # Extend
>>> x
[1, 2, 3, 4, 5, 6]
>>> x = x + [[7,8]] # Append
>>> x
[1, 2, 3, 4, 5, 6, [7, 8]]

18

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(): 用于合并两个列表或将多个元素插入一个列表中。

示例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]

15

追加操作一次性添加全部数据。整个数据将被添加到新创建的索引中。另一方面,extend(如其名称所示)扩展当前的数组。

例如:

list1 = [123, 456, 678]
list2 = [111, 222]

使用 append,我们得到:

result = [123, 456, 678, [111, 222]]

在使用extend时,我们得到:

result = [123, 456, 678, 111, 222]

15

有一个有趣的观点被暗示,但并没有解释,那就是extend比append更快。任何内部含有append的循环都应该用list.extend(processed_elements)来代替。

请记住,添加新元素可能会导致整个列表在内存中移到更好的位置上。如果这样做几次,因为我们一次只附加一个元素,整体性能会受到影响。从这个意义上讲,list.extend类似于"".join(stringlist)。


11

一本英语词典定义了appendextend的含义为:

append: 把(某物)添加到书面文件的末尾。
extend: 扩大。增加或扩展


有了这个知识,现在让我们来理解

1)appendextend之间的区别

append:

  • 将任何Python对象“原样”添加到列表的末尾(即作为列表中的最后一个元素)。
  • 结果列表可以嵌套,并包含异构元素(例如:列表、字符串、元组、字典、集合等等)。

extend:

  • 接受任何可迭代对象作为其参数,并使列表“更大”。
  • 结果列表始终是一维列表(即没有嵌套),并且它可能包含其中的异构元素(例如:字符、整数、浮点数),这是由于应用list(iterable)而产生的。

2)appendextend之间的相似之处

  • 两者都只接受一个参数。
  • 两者都在原地修改列表。
  • 因此,两者的返回值均为None

示例

lis = [1, 2, 3]

# 'extend' is equivalent to this
lis = lis + list(iterable)

# 'append' simply appends its argument as the last element to the list
# as long as the argument is a valid Python object
list.append(object)

7
我希望我能对这个问题做出有用的补充。如果您的列表存储特定类型的对象,例如 Info,以下情况不适合使用extend方法:在 for 循环中每次生成一个 Info 对象并使用 extend 将其存储到列表中时,它会失败。异常如下所示:

TypeError: 'Info' object is not iterable

但如果您使用append方法,则结果是可以的。因为每次使用extend方法,它总会将其视为列表或任何其他集合类型,迭代它,并将其放置在前一个列表之后。显然,无法迭代一个具体的对象。

5
为了直观区分它们。
l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l1.append(l2)
l1
['a', 'b', 'c', ['d', 'e', 'f']]

这就像l1在她的身体内部再次产生一个身体(嵌套)。

# Reset l1 = ['a', 'b', 'c']
l1.extend(l2)
l1
['a', 'b', 'c', 'd', 'e', 'f']

就像两个分离的个体结婚并组建一个团结的家庭。

此外,我为您制作了一份详尽的清单方法备忘录供参考。

list_methods = {'Add': {'extend', 'append', 'insert'},
                'Remove': {'pop', 'remove', 'clear'}
                'Sort': {'reverse', 'sort'},
                'Search': {'count', 'index'},
                'Copy': {'copy'},
                }

3

extend(L) 将给定列表 L 中的所有项添加到列表中以扩展列表。

>>> a
[1, 2, 3]
a.extend([4])  #is eqivalent of a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[len(a):] = [4]
>>> a
[1, 2, 3, 4]

0

append函数将列表(在原地)“扩展”一个元素,该元素是传递的单个对象。

extend函数将列表(在原地)“扩展”为传递的对象包含的元素数量。

这可能会对str对象有些许困惑。

  1. 如果您传递一个字符串作为参数: append将在末尾添加一个单个字符串项,而extend将添加与该字符串长度相同的多个“单一”的'str'项。
  2. 如果您传递一个字符串列表作为参数: 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,

你可以查看我的视频,讲解Python中的Extend和Append:https://youtu.be/8A5ohA-UeiI - Shweta Lodha

0

在Python中,追加和扩展是其中一种可扩展性机制。

追加:将一个元素添加到列表的末尾。

my_list = [1,2,3,4]

要将新元素添加到列表中,我们可以使用以下方式的append方法。

my_list.append(5)

新元素添加的默认位置始终是在(长度+1)位置。

插入:插入方法被用来克服追加的限制。使用插入,我们可以明确地定义我们想要插入新元素的确切位置。

insert(index, object) 的方法描述符。它需要两个参数,第一个是我们想要插入元素的索引,第二个是元素本身。

Example: my_list = [1,2,3,4]
my_list[4, 'a']
my_list
[1,2,3,4,'a']

扩展:当我们想将两个或多个列表合并成一个列表时,这非常有用。如果没有扩展,如果我们想要连接两个列表,则结果对象将包含一个列表的列表。

a = [1,2]
b = [3]
a.append(b)
print (a)
[1,2,[3]]

如果我们尝试访问位置2的元素,我们会得到一个列表([3]),而不是该元素本身。要将两个列表连接起来,我们需要使用append函数。
a = [1,2]
b = [3]
a.extend(b)
print (a)
[1,2,3]

合并多个列表

a = [1]
b = [2]
c = [3]
a.extend(b+c)
print (a)
[1,2,3]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接