以下代码适合我:
# -*- 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
Run Code Online (Sandbox Code Playgroud)
但是,为什么我不能通过使用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
Run Code Online (Sandbox Code Playgroud)
您只能使用索引(例如obj[x])来访问或修改已存在的项目list.例如,以下方法有效,因为我们正在访问的列表中的位置已存在:
>>> chars = ['a', 'b', 'c']
>>> chars[0]
'a'
>>> chars[0] = 'd'
>>> chars
['d', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
然而,访问或在位置上修饰的项目不存在一个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']
Run Code Online (Sandbox Code Playgroud)
如果您想简化代码,请尝试:(它使用列表推导)
N = int(raw_input("N="))
l = [raw_input("e" + str(i) + "=") for i in range(N)]
print l
Run Code Online (Sandbox Code Playgroud)
我认为在你的第二个例子中,我认为你的意思是为什么你不能直接分配列表元素。答案是因为元素尚未初始化,即。列表大小仍然是 0。你可以这样做
l = [0] * N
Run Code Online (Sandbox Code Playgroud)
将列表初始化为 N 个值为 0 的元素。
或者你可以这样做:
l.append(raw_input("e"+str(i)+"="))
Run Code Online (Sandbox Code Playgroud)