为Python list赋值不起作用?

2024-04-25 20:58:22 发布

您现在位置: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 

Tags: 代码示例inputrawutfintprintcoding
3条回答

必须先存在一个值,然后才能分配给它。第一次循环,i为0,l[0]尚不存在。

只能使用索引(例如obj[x])来访问或修改已存在于list中的项。例如,以下操作有效,因为我们正在访问的列表中的位置已经存在:

>>> chars = ['a', 'b', 'c']
>>> chars[0]
'a'
>>> chars[0] = 'd'
>>> chars
['d', 'b', 'c']

但是,在alist中不存在的位置访问或修改项将不起作用:

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

如果要简化代码,请尝试:(它使用list comprehension

N = int(raw_input("N="))
l = [raw_input("e" + str(i) + "=") for i in range(N)]
print l

我想在你的第二个例子中,我想你的意思是为什么你不能直接分配列表元素。答案是元素没有初始化,即列表大小仍然是0。你可以的

l = [0] * N

将列表初始化为N个值为0的元素。

或者你可以:

l.append(raw_input("e"+str(i)+"="))

相关问题 更多 >