为什么a[:] = 1与a[:] = '1'本质上不同?

37 投票
2 回答
3200 浏览
提问于 2025-04-17 11:17

请看这两段代码(注意字符串和整数之间的区别):

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']

撰写回答