给Python列表赋值无效?
以下代码对我来说运行得很好:
# -*- coding: utf-8 -*-
N = int(raw_input("N="))
l=[]
i = 0
while i<N:
n = raw_input("e"+str(i)+"=")
l.append(n)
i = i+1
print l
但是,为什么我不能用 l[i] = raw_input("e"+str(i)+"=")
来简化它呢?
举个例子:(这个不行)
# -*- coding: utf-8 -*-
N = int(raw_input("N="))
l=[]
i = 0
while i<N:
l[i] = raw_input("e"+str(i)+"=")
i = i+1
print l
4 个回答
3
在你给一个值赋值之前,这个值必须先存在。第一次循环的时候,i
是 0,而 l[0]
这个位置还不存在。
7
我觉得在你的第二个例子里,你想问的是为什么不能直接给列表里的元素赋值。这个问题的答案是因为这些元素还没有被初始化,也就是说列表的大小还是0。你可以这样做:
l = [0] * N
这样可以把列表初始化为N个元素,初始值都是0。
或者你也可以直接这样做:
l.append(raw_input("e"+str(i)+"="))
11
你只能通过索引(比如 obj[x]
)来访问或修改已经存在于 list
中的项目。举个例子,下面的代码可以正常工作,因为我们访问的列表中的位置已经存在:
>>> chars = ['a', 'b', 'c']
>>> chars[0]
'a'
>>> chars[0] = 'd'
>>> chars
['d', 'b', 'c']
但是,如果你尝试访问或修改那些在 list
中不存在的位置,就不行了:
>>> chars = ['a', 'b', 'c']
>>> chars[3]
...
IndexError: list index out of range
>>> chars[3] = 'd'
...
IndexError: list assignment index out of range
>>> chars
['a', 'b', 'c']
如果你想让代码更简洁,可以试试这个方法:(它使用了 列表推导式)
N = int(raw_input("N="))
l = [raw_input("e" + str(i) + "=") for i in range(N)]
print l