让我们说我想创建一个名单
listOfNames = []
然后我有一个while循环,如
count = 0
while listOfNames[count] < 10:
nameList[count] = raw_input("Enter a name: ")
count += 1
Python说列表索引超出范围,但列表索引应该是0,正确吗?
每次运行while循环时如何添加到列表中?我假设列表分配有问题。
答案 0 :(得分:11)
空列表还没有任何索引,它是一个空列表!如果你想填补它,你必须做这样的事情:
while count < 10:
nameList.append(raw_input("Enter a name: "))
count += 1
这样,您的条件将被评估,并且使用追加方法,您将能够在列表中添加新项目。
有一些高级技巧可以很容易地做到这一点,但考虑到你的水平,我认为你在继续之前理解这些代码会更好。
答案 1 :(得分:5)
大多数惯用法是使用列表理解:
namelist = [raw_input("Enter a name: ") for i in range(10)]
(或_
使用i
,尽管我个人不愿意)
这有利于动态创建列表,同时不必使用append()方法和显式索引。
答案 2 :(得分:1)
count = 0
while listOfNames[count] < 10:
nameList.append(raw_input("Enter a name: "))
count += 1
使用追加快速轻松...
可替换地:
nameList[len(nameList):] = [raw_input("Enter a name: ")]
编辑:你的意思是要附加listOfNames而不是nameList吗?
答案 3 :(得分:0)
您的列表分配是正确的,您的问题在于您使用尚不存在的索引。
count = 0
while listOfNames[count] < 10:
nameList[count] = raw_input("Enter a name: ")
count += 1
我很确定这段代码不符合您的意图。这段代码正在做的是检查listOfNames的第一个到第十个元素是否有一个小于10的数字,但由于它是一个空列表,没有索引为0的元素,或者任何其他索引,因此你的列表索引是范围例外。
以下内容将按您的意思运作:
count = 0
while len(listOfNames) < 10: # Keep going until the list has 10 elements
nameList.append(raw_input("Enter a name: "))
count += 1
但是我建议使用以下内容完全相同的东西,但应该更高效,同时更美观:
for _ in range(10):
listOfNames.append(raw_input("Enter a name:"))
注意使用append而不是索引引用。这会将新元素添加到列表的末尾,而使用您尝试执行的索引将失败,因为要分配给索引并且索引必须首先存在元素。