给Python列表赋值无效?

8 投票
4 回答
63944 浏览
提问于 2025-04-16 15:04

以下代码对我来说运行得很好:

# -*- 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

撰写回答