为什么[:] = 1与[:] ='1'根本不同?

时间:2012-01-28 12:17:02

标签: python

请考虑代码的两个片段(注意字符串和整数之间的区别):

a = []
a[:] = '1'

a = []
a[:] = 1

在第一种情况下a['1']。在第二个中,我收到错误TypeError: can only assign an iterable。为什么在此'1'上使用1会有根本的不同?

2 个答案:

答案 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