创建一个空列表以便随后分配数据

时间:2010-11-15 14:46:55

标签: python list indexing range

让我们说我想创建一个名单

listOfNames = []

然后我有一个while循环,如

count = 0
while listOfNames[count] < 10:
    nameList[count] = raw_input("Enter a name: ")
    count += 1

Python说列表索引超出范围,但列表索引应该是0,正确吗?

每次运行while循环时如何添加到列表中?我假设列表分配有问题。

4 个答案:

答案 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而不是索引引用。这会将新元素添加到列表的末尾,而使用您尝试执行的索引将失败,因为要分配给索引并且索引必须首先存在元素。