请考虑代码的两个片段(注意字符串和整数之间的区别):
a = []
a[:] = '1'
Run Code Online (Sandbox Code Playgroud)
和
a = []
a[:] = 1
Run Code Online (Sandbox Code Playgroud)
在第一种情况下a是['1'].在第二个,我得到错误TypeError: can only assign an iterable.为什么'1'在1这里使用过度根本不同?
NPE*_*NPE 79
分配给切片需要在右侧进行迭代.
'1'是可迭代的,而1不是.考虑以下:
In [7]: a=[]
In [8]: a[:]='abc'
Run Code Online (Sandbox Code Playgroud)
结果是:
In [9]: a
Out[9]: ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
如您所见,列表将字符串的每个字符作为单独的项目.这是因为迭代字符串会产生其字符.
如果要用a单个标量替换一系列元素,只需将标量包装在某种迭代中:
In [11]: a[:]=(1,) # single-element tuple
In [12]: a
Out[12]: [1]
Run Code Online (Sandbox Code Playgroud)
这也适用于字符串(假设字符串被视为单个项而不是字符序列):
In [17]: a[:]=('abc',)
In [18]: a
Out[18]: ['abc']
Run Code Online (Sandbox Code Playgroud)