IndexError:使用while循环列出索引超出范围

时间:2017-01-18 16:56:32

标签: python

我一直试图解决这个问题,但每次都会出现同样的错误消息:

  

而number_list [i]< = number_list [j]:

     

IndexError:列表索引超出范围

我搜索过相同类型的错误,但找不到非常相似的病例。

这是头程序(订购我的清单编号,从小编到大编):

    number_list=[]

list_lenght=int(input("List lenght: "))

while len(number_list)<list_lenght:
    item=input("Enter new item to the list:")
    number_list.append(item)
    print(number_list)

print("That's your number list: ",number_list)

number_list_final=[]

def order_number_list(number_list):
    i=0
    j=1
    while (j)<=(len(number_list)-1):
        while number_list[i]<=number_list[j]:
            j=j+1
        i=j
        j=i+1
    final_item=number_list[i]
    number_list_final.append(final_item)`
    del number_list[i] 
    order_number_list(number_list)

order_number_list(number_list)
print(number_list_final)

我知道这是关于在修改它时迭代列表,但不知道如何解决它。

有人可以帮我调试一下,或者给我一些提示吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您就会尝试对数字列表进行排序。这里有一个内置的Python方法,经过优化,可以快速使用最少的内存,它被称为sorted

请尝试:

,而不是运行order_number_list
print(sorted(number_list))

如果这是某种功课,并且您不允许使用内置sorted,出于教育目的,我建议您使用名为冒泡排序的排序算法,此处有更多信息 - Bubble Sort Homework

答案 1 :(得分:0)

更新代码以包含几个打印语句会显示j增加到超过列表的长度。然后&#34;而number_list [i]&lt; = number_list [j]:&#34;不再可以完成,因为没有&#34; number_list [j]&#34;对于j值。

number_list=[1,2,3,4,5]

list_lenght=5
#=int(input("List lenght: "))

#while len(number_list)<list_lenght:
#    item=input("Enter new item to the list:")
#    number_list.append(item)
#    print(number_list)

print("That's your number list: ",number_list)

number_list_final=[]

def order_number_list(number_list):
    i=0
    j=1
    while (j)<=(len(number_list)):
        while number_list[i]<=number_list[j]:
            print (j)
            print (i)
            j=j+1
        i=j
        j=i+1
    final_item=number_list[i]
    number_list_final.append(final_item)
    del number_list[i] 
    order_number_list(number_list)

order_number_list(number_list)
print(number_list_final)

输出:

That's your number list:  [1, 2, 3, 4, 5]
1
0
2
0
3
0
4
0
Traceback (most recent call last):
  File "C:/Python3/numberlist.py", line 30, in <module>
    order_number_list(number_list)
  File "C:/Python3/numberlist.py", line 19, in order_number_list
    while number_list[i]<=number_list[j]:
IndexError: list index out of range

对于此示例,一旦j为5,代码就会失败,它试图与不存在的数字进行比较

答案 2 :(得分:0)

number_list=[]

list_lenght=int(input("List length: "))

while len(number_list)<list_lenght:
    item=input("Enter new item to the list:")
    number_list.append(int(item))
    print(number_list)

print("That's your number list: ",number_list)

number_list_final=[]

def order_number_list(number_list):
    current_low = ["number"]
    current_low[0] = number_list[0]
    x = 1
    current_low_pos = 0
    while x < len(number_list):
        if current_low[0] > number_list[x]:
            current_low[0] = number_list[x]
            current_low_pos = x
        x = x + 1
    del number_list[current_low_pos]

    if number_list == []:
        remaining_list = []
    else:
        remaining_list = order_number_list(number_list)

    return (current_low + remaining_list)
number_list_final = order_number_list(number_list)
print(number_list_final)

这是已经澄清和纠正的代码。 正如其他答案所指出的那样,j无法正常工作。

number_list.append(item)

需要更改为:

number_list.append(int(item))

因为您无法将字符串与'&lt;'进行比较操作

我还添加了一个return语句,添加了这行代码:

number_list_final = order_number_list(number_list)

因为最终的print语句会打印一个空列表,因为:

order_number_list(number_list)

不会更改变量number_list_final。

我将一些功能代码改为简单,使其更具可读性。

它还明确地将当前最低项目设置为第一项,并在稍后找到较低项目时进行更改。

希望这有帮助,如果您有任何问题,请与我联系!