当你使用 Python 列表时,你经常需要组合来自多个列表的数据。那你怎么做呢?

在本教程中,我们将看到组合来自多个列表的数据的不同方式。我们还将通过简单的示例了解列表方法 append()extend() 如何工作。让我们开始吧。

如何在 Python 中使用 “+” 运算符

在我们查看 append()extend() 方法的工作原理之前,让我们看看用于连接列表的 + 运算符的作用。

考虑以下示例,其中我们有两个列表,list_1list_2,我们希望将它们连接起来(或端到端连接在一起):

list_1 = [1,2,3,4,5]
list_2 = [6,7,8]

print(list_1 + list_2)
# Output
[1, 2, 3, 4, 5, 6, 7, 8]

print(list_1)
# Output
[1, 2, 3, 4, 5]

print(list_2)
# Output
[6, 7, 8]

如果你仔细阅读上面的代码片段,你可以看到以下内容。

  • list_1 + list_2 不会将 list_2 中的项目添加到 list_1
  • 相反,它会创建一个包含 list_1list_2 中的项目的新列表。

因此,list_1list_2保持不变。

如果我们想修改 list_1 而不是创建新列表怎么办?好吧,让我们在下一节中使用 append() 和  extend() 方法来做到这一点。

如何在 Python 中使用 append() 方法

在本节中,我们将使用列表方法将 list_2 中的项目添加到 list_1。考虑上一节中的相同示例列表,现在让我们尝试通过向 list_1 添加 list_2 中的元素来修改 list_1

下面的代码片段以 list_2 作为参数调用 list_1 上的 append() 方法。

# Let's append list_2 to list_1
list_1.append(list_2)
print(list_1)

# Output
[1, 2, 3, 4, 5, [6, 7, 8]]


# print the length of list_1
print(len(list_1))

# Output
6

我们看到 list_2 已作为单个列表项附加到 list_1 的末尾。这意味着 list_1 的长度在 append() 操作后增加了 1。

如果我们不想将 list_2 中的项目添加到 list_1,而不是作为 list_1 末尾的单个列表,而是作为单个项目,该怎么办?让我们在下一节中这样做。

如何在 Python 中使用 extend() 方法

在我们开始使用 extend() 方法之前,让我们做以下事情。

  • 循环遍历 list_2
  • list_2 中的每一项附加到 list_1
for item in list_2:
  list_1.append(item)

print(list_1)

# Output
[1, 2, 3, 4, 5, 6, 7, 8]

我们现在已经按照我们想要的方式添加了将 list_2 的所有项目添加到 list_1。😀

我们可以通过调用 list_1 上的 extend() 方法以 list_2 作为参数来做同样的事情。你可以在下面的代码片段中看到它是如何工作的:

# Let's extend list_1 with items from list_2
list_1.extend(list_2)
print(list_1)

# Output
[1, 2, 3, 4, 5, 6, 7, 8]

# print the length of list_1
print(len(list_1))

# Output
8

因此,如果你使用长度为 len2 的列表扩展长度为 len1 的列表,则调用 extend() 方法的列表的长度为 len1 + len2

有任何注意事项吗?

如果我们希望将单个项目而不是整个列表(或任何可迭代的)添加到我们现有的列表中,怎么办?在以下示例中,让我们使用 append() 将布尔值 True 添加到 list_1,如下所示。

list_1 = [1,2,3,4,5]
list_1.append(True)
print(list_1)

# Output
[1, 2, 3, 4, 5, True]

如果我们尝试使用 extend() 来做和上面一样的事情,会怎样?

list_1 = [1,2,3,4,5]
list_1.extend(True)
print(list_1)

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-16-9e4e0d6da67b> in <module>()
      1 list_1 = [1,2,3,4,5]
----> 2 list_1.extend(True)
      3 print(list_1)

TypeError: 'bool' object is not iterable

哦,这样做会引发错误。😢  让我们尝试解析返回的错误消息。TypeError: 'bool' object is not iterable,这意味着我们的参数类型不正确。

extend() 方法要求参数是可迭代的。在内部,extend() 方法通过循环遍历迭代并将迭代中的每个项目添加到第一个列表来工作。列表、集合、元组和字符串都是可迭代对象的例子。

任何可以循环访问并访问单个项目的对象都是可迭代对象。请注意,使用 extend() 方法的一般语法是 list_name.extend(iterable)

尝试在字符串上使用 extend() 和 append()

字符串本质上是一个字符序列,因此是可迭代的。让我们尝试在 list_1 上使用 extend()append() 方法,并将字符串作为参数。

让我们使用 append() 方法将字符串 'Happy' 添加到 list_1

list_1 = [1,2,3,4,5]
list_1.append('Happy')
print(list_1)

# Output
[1, 2, 3, 4, 5, 'Happy']

现在让我们尝试使用 extend() 方法添加相同的字符串。这次应该不会报错。相反, extend() 方法应该遍历字符串并将每个字符添加到 list_1

让我们检查一下这在下面的代码示例中是否有效。🙂

list_1 = [1,2,3,4,5]
list_1.extend('Happy')
print(list_1)

# Output
[1, 2, 3, 4, 5, 'H', 'a', 'p', 'p', 'y']

很直观地看到 append() 方法在恒定时间内运行,而 append() 方法应该有一个运行时,该运行时与作为参数传递给该方法的可迭代的长度成正比。

总结

我希望这篇文章阐明了如何在 Python 中使用 append()extend() 方法。感谢你的阅读,祝你学习和编码愉快!

相关文章

有关 Python 列表和常用列表方法的一般介绍,请查看这篇文章:Python 中的列表 - 综合指南

封面图片来自 Unsplash,摄影师是 Karly Jones

原文:Python List Methods – append( ) vs extend( ) in Python Explained with Code Examples,作者:Bala Priya