编程Python 开发者

Python 中的 append() 方法与 extend() 方法有什么区别?请举例说明错误理解导致的逻辑错误。

用 Hintsage AI 助手通过面试

答案。

Python 中的列表方法 append()extend() 用于添加元素,但其原理上是不同的:

  • append(obj)一个元素 (任何对象,包括列表)添加到原始列表的末尾
  • extend(iterable)所有元素 逐个添加到可迭代对象(像是将其 "展开" 进行添加)

示例:

lst = [1, 2, 3] lst.append([4, 5]) # 结果: [1, 2, 3, [4, 5]] lst = [1, 2, 3] lst.extend([4, 5]) # 结果: [1, 2, 3, 4, 5]

这种差异常常导致逻辑错误,当期望一个 "扁平" 列表时却得到了嵌套的列表。

诡问。

如果执行 list1 = [1, 2]; list2 = [3, 4]; list1.append(list2) 会怎样?list1 的样子是什么?与 list1.extend(list2) 有什么不同?

答案:

  • 执行 list1.append(list2) 后,结果为: [1, 2, [3, 4]] — 第二个列表作为一个元素(嵌套列表)被添加
  • 执行 list1.extend(list2) 后,结果为: [1, 2, 3, 4] — 第二个列表的元素 "展开" 并作为单独元素添加

由于不了解此主题的细微差别而导致的实际错误示例。


故事

开发人员在合并多个文件的解析结果时使用了 output.append(parsed_lines)。结果是,得到的不是一个长的扁平列表,而是列表的列表(每个文件一个元素),这破坏了后续处理,特别是期望字符串序列的函数开始在输入数据上报错。


故事

在项目中使用了 extend 来添加字符串 "foo"(即将字符串视为可迭代的)。这导致字符串的字符成为列表的单独元素: ['f', 'o', 'o'] 而不是期望的 "foo"。


故事

在将数据序列化以传递到 JSON 的过程中,在循环中使用 append/extend,而没有理解其区别。结果是产生了破坏结构的结果,这导致部分微服务在验证阶段开始崩溃或工作不正常。