在python中分配一个列表

时间:2010-04-09 09:32:31

标签: python

pt=[2]
pt[0]=raw_input()

当我这样做,并给出输入假设1011,它表示列表索引错误 - “列表分配索引超出范围”。我可以知道为什么吗?我想我无法正确分配清单。那么如何在python中分配2个元素的数组?

2 个答案:

答案 0 :(得分:4)

试试这个:

pt = list()
pt.append(raw_input())
pt.append(raw_input())
print pt

您现在列表中有两个元素。一旦你更熟悉python语法,你可以把它写成:

pt = [raw_input(), raw_input()]

另外,请注意,不要将列表与Java或C中的数组混淆:列表会动态增长。创建新列表时不必声明大小。

BTW:我在交互式shell中尝试了你的例子。它有效,但可能没有你想象的那样:

>>> pt = [2]
>>> pt[0] = raw_input()
1011
>>> pt
['1011']

我猜你认为pt = [2]会创建一个长度为2的列表,所以pt[1] = raw_input()会像你提到的那样失败:

>>> pt = [2]
>>> pt[0] = raw_input()
1011
>>> pt[1] = raw_input() # this is an assignment to an index not yet created.
1012
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

实际上,pt = [2]会创建一个包含一个元素的列表,其索引2的值为0

>>> pt = [2]
>>> pt
[2]
>>>

所以你可以如上所示分配给索引0,但是分配给索引1将不起作用 - 使用append附加到列表。

答案 1 :(得分:3)

目前尚不清楚你要做什么。我的猜测是你试图这样做:

pt = [2] # Create array with two elements?
for i in range(2):
    pt[i] = raw_input()

请注意,第一行不会创建包含两个元素的数组,它会创建一个包含一个元素的列表:数字2.您可以尝试这样做,尽管有更多Pythonic方法可以执行此操作:

pt = [None] * 2
for i in range(2):
    pt[i] = raw_input()