我的python 2.7有错误 我正在尝试排序元素列表。 这是我的代码:
index=7
print(len(myList)) #print 16
sortedList = sorted(myList,key=lambda x: float(x[index]),reverse=True)
我无法理解为什么我有这个错误,我的索引小于列表长度...有什么想法吗?
sortedList = sorted(myList,key=lambda x: float(x[index]),reverse=True)
IndexError: list index out of range
答案 0 :(得分:2)
并非index
小于len(list)
但在此功能中
sortedList = sorted(myList,key=lambda x: float(x[index]),reverse=True)
列表中的每个项目都作为x
传递,因此它正在尝试访问x[7]
,但在所有情况下可能都不是这样
答案 1 :(得分:1)
鉴于您的排序键和您看到的错误,我假设Class
是一个列表列表。
您似乎正在尝试按{8}成员项的值对myList
的成员进行排序。
不幸的是,并非myList
的所有成员都有8个成员,因此您遇到了错误:myList
您没有发现这一点,因为您正在检查IndexError: list index out of range
的长度,而不是其成员列表的长度。
您可以尝试执行此操作:
myList
我怀疑其中至少有一个小于8.让我用代码演示:
for sublist in myList:
print(len(sublist))
骆驼案例如对于变量名称,通常会避免使用import random
working_list = []
bad_list = []
for n in range(16):
#Make a sublist of random integers - 10 members long
good_sublist = [random.randint(0,10) for _ in range(10)]
#make a sublist of random integers from 0 to 15 members long
bad_sublist = [random.randint(0,10) for _ in range(n)]
working_list.append(good_sublist)
bad_list.append(bad_sublist)
# Your code from here on in
index=7
sortedList = sorted(working_list,key=lambda x: float(x[index]),reverse=True)
print sortedList
# all Good! Each sublist has 10 members - the list is sorted by the 7th member
sortedList = sorted(bad_list,key=lambda x: float(x[index]),reverse=True)
print sortedList
,myList
,首选sortedList
或my_list
(请参阅PEP8)。为了便于参考,我在代码示例中保留了您的名字,但我建议您转到下划线样式以获得可维护性,便于其他Python编程人员阅读等。