请考虑代码的两个片段(注意字符串和整数之间的区别):
a = []
a[:] = '1'
和
a = []
a[:] = 1
在第一种情况下a
是['1']
。在第二个中,我收到错误TypeError: can only assign an iterable
。为什么在此'1'
上使用1
会有根本的不同?
答案 0 :(得分:79)
分配到切片需要在右侧进行迭代。
'1'
是可迭代的,而1
则不是。请考虑以下事项:
In [7]: a=[]
In [8]: a[:]='abc'
结果是:
In [9]: a
Out[9]: ['a', 'b', 'c']
如您所见,列表将字符串的每个字符作为单独的项目。这是因为迭代字符串会产生其字符。
如果你想用一个标量替换一系列a
的元素,只需将标量包装在某种迭代中:
In [11]: a[:]=(1,) # single-element tuple
In [12]: a
Out[12]: [1]
这也适用于字符串(假设字符串被视为单个项而不是字符序列):
In [17]: a[:]=('abc',)
In [18]: a
Out[18]: ['abc']
答案 1 :(得分:2)
'1'
是一个字符串,但它是可迭代的。它就像一个字符列表。 a[:]='1'
将字符a
的内容替换为字符串'1'
的内容。但是1
是一个整数。
Python不会改变类型。
示例:
print bool(1=='1') # --> False