我一直试图解决这个问题,但每次都会出现同样的错误消息:
而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)
我知道这是关于在修改它时迭代列表,但不知道如何解决它。
有人可以帮我调试一下,或者给我一些提示吗?
谢谢!
答案 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。
我将一些功能代码改为简单,使其更具可读性。
它还明确地将当前最低项目设置为第一项,并在稍后找到较低项目时进行更改。
希望这有帮助,如果您有任何问题,请与我联系!