1

在 python 中,我可以执行以下操作:

d = dict()
i = int()
f = float()
l = list()

但是没有字符串的构造函数

>>> s = string()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'string' is not defined

这是为什么?或者,是否有字符串类型的构造函数?

此外,根据上述定义,

d['a'] = 1

有效,但是

>>> l[0] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

才不是。

谁可以给我解释一下这个?

4

4 回答 4

3

你的意思是:

a = str()

我相信。然后一切正常。

至于d['a']l[0]:之间的区别d是一个字典,它具有存储元素的稀疏表示。而列表 ( l) 密集地表示数据:所以如果您有:

l = [1,2]

你随后写道:

l[200] = 31

这意味着,以及分配给元素 200,是完全一致的,也将一些任意值放入其中l[3:199]

于 2012-07-09T21:00:39.843 回答
2

正如其他人所指出的,您想要str,而不是string.

但是要回答您的其他问题,不能通过分配来扩展列表。如果您尝试在列表范围之外进行分配,则会出现错误。另一方面,字典在任何有意义的意义上都没有界限。他们只有定义的键和未定义的键。

把字典想象成一袋捆绑在一起的物品,把列表想象成一个带有固定数量隔间的托盘。你可以随时把一对东西扔进包里,但如果没有这样的隔间,你就不能把东西放在托盘的隔间里。你必须创建隔间,使用append或类似的东西。由于您的“托盘”还没有隔间,因此l[0] = x失败了。

于 2012-07-09T21:04:33.617 回答
1

是的,我们已经str()

>>> s=str()
>>> s
''
于 2012-07-09T21:00:40.783 回答
1

有一个用于创建字符串的内置函数:

s = str()  # s == ''

至于您的分配到列表与您的分配到字典:

字典是无序的,因此能够随时随地添加键值对是完全有意义的。事实上,字典键甚至不需要是相同的类型 ( d[1]='foo'; d["string"]='bar')。然而,列表是有序的。考虑以下:

a=list()
a[1]='foo'

在这种情况下,语言应该做什么? a[0]尚未定义,因此语言必须编造一些东西以保持列表的有序性,否则会引发错误。分配给a[0]或序列中的下一个元素(例如a=list(); a[0]='bar')是一种非常特殊的情况,从阅读“Python 之禅”来看,特殊情况并不足以打破规则。我猜这就是为什么 Guido 决定在分配给它之前强制列表元素存在的原因(例如a=list(); a.append('foo'); a[0]='bar'

于 2012-07-09T21:06:08.507 回答