Python列表中+与+=的差异及元素添加异常问题咨询
Python列表:
+= vs + 以及字符串被拆分的原因 嘿,这个问题其实戳中了Python列表的两个核心特性:可变对象的原地操作和可迭代对象的处理逻辑,我来给你讲明白~
1. 为什么+=有效而+无效?
先看个例子,你大概率是写了类似这样的代码:
my_list = [1, 2, 3] # 用+操作,原列表没变化 my_list + ["test1"] print(my_list) # 输出还是 [1, 2, 3] # 用+=操作,列表直接更新 my_list += ["test1"] print(my_list) # 输出 [1, 2, 3, "test1"]
原因很直观:
+运算符对列表来说,是创建一个全新的列表——把两个列表的元素合并后返回这个新列表,但它绝对不会修改原来的列表。如果想让原列表跟着变,你得把结果重新赋值回去:my_list = my_list + ["test1"]。+=则是调用列表的__iadd__方法,属于原地修改操作——直接在原来的列表对象上追加元素,不需要重新赋值,所以原列表会立刻发生变化。
2. 为什么"test1"被拆成单个字符?
这个坑很多新手都会踩!问题出在你可能直接把字符串传给了+=(如果用+传字符串会直接报错,因为+要求两边必须都是列表)。
比如:
my_list = [1, 2, 3] my_list += "test1" # 注意这里是字符串,不是列表 print(my_list) # 输出 [1, 2, 3, 't', 'e', 's', 't', '1']
Python里字符串是可迭代对象,而列表的+=操作支持接收任何可迭代对象(不只是列表),它会把可迭代对象里的每一个元素逐个添加到列表中。字符串的每个字符就是它的迭代元素,自然就被拆成单个字符了。
如果想把"test1"作为单个完整元素添加,你有两种简单方式:
# 方法1:用列表包装字符串 my_list += ["test1"] # 方法2:用append方法直接添加 my_list.append("test1")
这两种方式都会让"test1"以一个整体出现在列表里。
内容的提问来源于stack exchange,提问作者Francois
相关产品推荐
相关产品推荐

