Python三个列表操作代码结果差异及两类疑问解答
问题背景与疑问
代码示例与输出
代码1
list_a = [] list_a += str(1)
输出:
['1']
代码2
list_a = [] list_a += 1
输出:
Type Error
代码3
list_a = [] list_a = list_a + str(1)
输出:
Type Error
疑问
- 既然
+=运算符允许列表与字符串进行拼接操作,为何无法与int类型执行该操作? - 为何
list_a = list_a + str(1)会报错,即便str(1)是字符串类型?
解答
针对疑问1:为什么列表用+=能接字符串,却不能接int?
列表的+=运算符背后调用的是list.extend()方法,这个方法只认可迭代对象——就是能被逐个拆成元素的对象,比如字符串、列表、元组都属于这类。
字符串str(1)是可迭代的,它会被拆成单个字符'1',然后逐个加到空列表里,所以最终得到['1']。但int类型不是可迭代对象,extend()没法把一个整数拆成多个元素添加,自然就报类型错误了。
针对疑问2:为什么list_a + str(1)会报错?
列表的+运算符和+=完全是两回事:+要求两边必须都是列表,它的作用是把两个列表合并成新列表。这里list_a是列表,str(1)是字符串,类型不匹配,Python不知道怎么把列表和字符串做加法,所以直接报错。
简单总结:+=靠extend()处理可迭代对象,+只认同类型的列表,这就是两者行为差异的核心原因。
内容的提问来源于stack exchange,提问作者Bhuvana ravula
相关产品推荐
相关产品推荐

