为何Python列表用+=会拆分字符串为单个字符,append()则保留完整对象?
为什么Python中列表的
+=操作和append()方法处理字符串时表现不同? 嘿,这个问题我刚学Python的时候也懵过,其实核心在于+=和append()对列表的作用逻辑完全不一样,咱们掰开揉碎了说:
先看+=操作的本质
列表的+=运算符背后调用的是__iadd__魔法方法,这个方法的规则是:它会把右侧的可迭代对象拆成一个个元素,然后逐个添加到列表中。
而Python里的字符串本身就是可迭代对象——你可以把字符串想象成一串单个字符组成的序列。所以当你执行b += i(这里的i是'hello'或者'goodbye')时,Python会自动把字符串拆成每个单独的字符,再依次加到列表b里。
代码示例:
a = ['hello', 'goodbye'] b = [] for i in a: b += i print(b) # 输出: ['h','e','l','l','o','g','o','o','d','b','y','e']
再看append()方法的设计
append()方法的定位很明确:它就是用来把整个传入的对象,作为列表的单个元素追加到末尾。
不管你传的是字符串、数字还是另一个列表,append()都不会去拆解这个对象,而是直接把它当成列表的一个元素放进去。所以当你把字符串'hello'传给b.append(i)时,它就直接把'hello'作为一个完整元素加到列表里了。
代码示例:
a = ['hello', 'goodbye'] b = [] for i in a: b.append(i) print(b) # 输出: ['hello','goodbye']
额外小技巧
如果想用+=达到和append()一样的效果,其实可以把字符串包装成一个单元素列表,这样+=就会把这个列表里的单个元素(也就是完整的字符串)加进去:
a = ['hello', 'goodbye'] b = [] for i in a: b += [i] print(b) # 输出: ['hello','goodbye']
内容的提问来源于stack exchange,提问作者Jorge C Phosphorus
相关产品推荐
相关产品推荐

