为什么a[:] = 1与a[:] = '1'本质上不同?
请看这两段代码(注意字符串和整数之间的区别):
a = []
a[:] = '1'
和
a = []
a[:] = 1
在第一种情况下,a
是 ['1']
。而在第二种情况下,我遇到了错误 TypeError: can only assign an iterable
。为什么在这里使用 '1'
和 1
会有根本性的不同呢?
2 个回答
2
'1'
是一个字符串,但它是可以被逐个读取的,就像一个字符列表一样。a[:]='1'
这段代码是把列表 a
的内容替换成字符串 '1'
的内容。不过 1
是一个整数。
在 Python 中,类型是不会自动改变的。
举个例子:
print bool(1=='1') # --> False
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']