Python列表实验室的索引错误

问题描述 投票:0回答:3

我的计算机科学老师分配了一个实验室,我们需要创建一个循环,创建50个列表,并在每次输入数字时为每个列表的值加1。我们不允许有一个列表,只是使用count函数来完成这个任务(出于一些奇怪的原因)。

基本上,我想要这个代码工作,但是以老师想要的方式:

l_a=[]

for num in range(0,10):
    y=int(input("Enter a number: "))
    l_a.append(y)

print(l_a)

for x in range(0,51):
    z=(l_a.count(x))
    if z==1:
        print("There is "+str(z)+" "+str(x)+".")
    if z>1:
        print("There are "+str(z)+" "+str(x)+"'s.")

这是我到目前为止创建的代码:

list=[]

for index in range(0,51):
    list[index]=0

for num in range(0,51):
    y=(int)(input("Enter a number: "))
    list[y]+=1

我收到以下错误:IndexError:列表赋值索引超出范围

任何帮助将不胜感激。

谢谢,

哈里森

python python-3.x
3个回答
0
投票

您获得索引超出范围的原因是因为在列出列表时

lst = []

您实际上正在创建长度为0的列表。

如果要创建特定范围的列表,可以执行以下操作:

lst = [0] * 52

基本上创建一个52 0的列表。

虽然从我的理解中你想要创建一个包含多个列表的列表,你可以像这样做

lst = [[0]] * 52

创建一个包含52个列表的列表,每个列表包含0。

我认为两种方式都不那么pythonic,你应该在创建新成员时使用append函数。

lst.append([0])

将[0]列表附加到列表的末尾。


0
投票

使用老师的结构

lst=[]
for index in range(0,51):
    lst.append(0)
print(lst)

y=(input("Enter a number: "))
while y.isdigit():
    y=(int)(y)
    lst[y]+=1
    y=(input("Enter a number: "))

print(lst)

但是,我们可以写得更简洁

lst = [0] * 50
while True:
    y=(input("Enter a number: "))
    if not y.isdigit(): break
    y=(int)(y)
    if y < 50: lst[y]+=1

print(lst)

这将创建一个包含50个零的列表。然后我们可以运行代码的输入部分。首先,我们检查输入是否是数字,如果不是我们break。然后,如果数字小于50,我们递增数组中该索引处的值。


0
投票

我可能会这样做:

d = {}
i = 0
while i =< 50:
  d[i]=['1']
  i =+ 1
© www.soinside.com 2019 - 2024. All rights reserved.