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,而没有理解其区别。结果是产生了破坏结构的结果,这导致部分微服务在验证阶段开始崩溃或工作不正常。