HOWTO · Python
用 Python 将多个元素添加到列表中
我们可以通过手动添加值将多个元素追加到列表中,也可以使用 append()、extend()、concatenation 和 itertools 方法。
本页内容
要将可迭代对象中的值添加到现有 Python 列表,请使用 extend() 方法。它会原地修改该列表。append() 方法每次调用添加一个对象,而 + 和 itertools.chain 后接 list() 会创建新列表。切片赋值可以在指定位置插入值。
选择方法时,应考虑是否需要修改现有列表、新值应放在哪里,以及是否需要新结果。下面的示例展示了各个选项的行为。
使用 append() 添加单个元素
append() 是列表方法,会将参数作为一个对象添加到列表末尾。如果参数本身是一个列表,它仍会作为单个嵌套元素保留。重复调用 append() 时,每次调用都会添加一个对象。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
values = ["red", "blue"]
values.append("green")
print(values)
要添加多个彼此独立的值,可以为每个值调用一次 append()。如果要添加的是可迭代对象中的多个值,通常直接使用 extend() 更方便。
使用 extend() 添加多个元素
extend() 会遍历一个可迭代对象,并将它产生的每个值追加到现有列表中。列表本身会被修改;该方法返回 None,因此应继续使用原来的列表变量,而不要把方法的返回值赋给它。
本节中的代码以及显示的标签或输出仍为英文。
colors = ["red", "blue"]
colors.extend(["green", "yellow"])
print(colors)
元组或字符串等其他可迭代对象也适用此方法。字符串每次产生一个字符,因此使用 "hi" 扩展列表会分别添加 "h" 和 "i"。如果希望将整个可迭代对象作为一个对象存入列表,请使用 append()。
使用切片赋值插入多个元素
切片赋值会用可迭代对象中的值替换列表中被选中的部分。空切片不会选中任何现有值,因此向空切片赋值会插入新值,并保留列表其余部分。插入位置由索引决定。
本节中的代码以及显示的标签或输出仍为英文。
items = ["a", "d"]
items[1:1] = ["b", "c"]
print(items)
这里的切片起始和结束索引都是 1,因此两个新值都会放在原有的 "d" 前面。非空切片则会替换被选中的值;如果要插入而不是替换,请检查切片边界。
使用 + 合并列表
+ 运算符会连接列表并返回一个新列表。它不会修改任一操作数;当你希望原列表保持原样、仍可继续使用时,这种方式很有用。
本节中的代码以及显示的标签或输出仍为英文。
first = [1, 2]
second = [3, 4]
combined = first + second
print(combined)
使用 + 连接列表时,两个操作数都必须是列表。如果你想将值添加到一个现有列表中,请使用 extend(),而不是创建并赋值一个连接后的结果。
使用 itertools.chain 从可迭代对象创建列表
itertools.chain 会生成一个迭代器,按顺序产生各个输入可迭代对象中的值。需要将这些值具体化为新列表时,可将它传给 list()。当输入本身已经是可迭代对象,或需要依次遍历多个数据源时,这种方式很有用;它不会修改这些数据源。实际性能取决于周边操作和数据,因此不能笼统地说它一定比其他方式更高效。
本节中的代码以及显示的标签或输出仍为英文。
from itertools import chain
numbers = [1, 2]
more_numbers = (3, 4)
combined = list(chain(numbers, more_numbers))
print(combined)
也可以在循环中直接消费该迭代器,而不创建列表。只有在需要列表结果时,才将它具体化为列表。
选择合适的方法
- 使用
append()添加一个对象;如果要分别处理每个值,也可以重复调用它。 - 使用
extend()将可迭代对象中的每个值添加到现有列表中。 - 使用切片赋值在指定位置插入可迭代对象中的值;空切片会插入值,不会替换现有内容。
- 使用
+根据两个列表创建新列表,同时保持输入列表不变。 - 使用
list(itertools.chain(...))将多个可迭代对象产生的值组成一个新列表。如果迭代器本身就够用,可以省略list()。
如果常见需求是向已有列表添加多个值,优先考虑 extend()。需要按索引插入、创建单独的连接结果,或从多个数据源获得迭代器时,再选择其他方式。