我想要排序列表; 我的意见是
list1 = [[10,[1,4,5]],[40,[1,5,6]],[30,[2,4,5]],[50,[3,5,6]],[60,[2,5,6]],[20,[3,4,5]]]
我的例外输出是
list1 = [[10,[1,4,5]],[30,[2,4,5]],[20,[3,4,5]],[40,[1,5,6]],[60,[2,5,6]],[50,[3,5,6]]]
请给我一些东西。提前谢谢。
答案 0 :(得分:2)
<强>更新强>
这是产生我想要你想要的输出的东西:
list1 = [[10,[1,4,5]],[40,[1,5,6]],[30,[2,4,5]],[50,[3,5,6]],[60,[2,5,6]],[20,[3,4,5]]]
print(sorted(list1, key=lambda x: (x[1][1:], x[1][0])))
<强>输出强>
[[10, [1, 4, 5]], [30, [2, 4, 5]], [20, [3, 4, 5]], [40, [1, 5, 6]], [60, [2, 5, 6]], [50, [3, 5, 6]]]
这会将第二个项目排序到内部列表的末尾,然后排在内部列表的第一个项目上。您会注意到,您对[20, [3, 4, 5]]
和[30, [2, 4, 5]]
项的输入会将预期输出更改为[20,[2,4,5]]
和[30,[3,4,5]]
。你的问题确实有拼写错误。
原始回答
看起来您想要对每个列表项的内部列表进行排序。我说“看起来”,因为它不会产生所需的输出,但它看起来很接近。
list1 = [[10,[1,4,5]],[40,[1,5,6]],[30,[2,4,5]],[50,[3,5,6]],[60,[2,5,6]],[20,[3,4,5]]]
list1 = sorted(list1, key=lambda x: x[1])
print(list1)
<强>输出强>
[[10, [1, 4, 5]], [40, [1, 5, 6]], [30, [2, 4, 5]], [60, [2, 5, 6]], [20, [3, 4, 5]], [50, [3, 5, 6]]]
答案 1 :(得分:2)
>>> sorted(list1, key=lambda x: (x[1][1:], x[1][0]))
[[10, [1, 4, 5]], [30, [2, 4, 5]], [20, [3, 4, 5]], [40, [1, 5, 6]], [60, [2, 5, 6]], [50, [3, 5, 6]]]
>>>
因此,如果我没错,您就会尝试获取[1, 4, 5]
,[2, 4, 5]
,[3, 4, 5]
,然后[1, 5, 6]
,{{1} },[2, 5, 6]
。
然后使用strategy pattern对您的列表进行排序,[3, 5, 6]
为您提供(x[1][1:], x[1][0])
,4, 5, 1
之类的内容。然后sorted()
函数将根据它们对列表进行排序。
请注意,4, 5, 2
会创建另一个列表,但它不会更改当前列表。如果您想要更改它,您需要使用:
sorted()
但是,这是使用sorted()
的另一种方式:
list1 = sorted(list1, key=lambda x: (x[1][1:], x[1][0]))
答案 2 :(得分:1)
您应该使用自定义函数进行排序。如果我理解你尝试做什么,你需要:
def cmp_items(a, b):
if a[0] > b[0]:
return 1
elif a[0] == b[0]:
return 0
else:
return -1
myList.sort(cmp_items)
答案 3 :(得分:1)
您可以将键元素传递给已排序的函数:
>>> sorted(list1, key=lambda x:x[0])
[[10, [1, 4, 5]], [20, [3, 4, 5]], [30, [2, 4, 5]], [40, [1, 5, 6]], [50, [3, 5, 6]], [60, [2, 5, 6]]]
答案 4 :(得分:1)
怎么样:
>>> sorted(list1)
[[10, [1, 4, 5]], [20, [3, 4, 5]], [30, [2, 4, 5]], [40, [1, 5, 6]], [50, [3, 5, 6]], [60, [2, 5, 6]]]
如果您希望输出为:[[1, 4, 5], [2, 4, 5], [3, 4, 5], [1, 5, 6], [3, 5, 6], [2, 5, 6]]
,如下面的评论中所示,您可以使用sorted
和list comprehension
:
>>> list2 =sorted([i[1] for i in list1], key=lambda x: x[2])
>>> list2
[[1, 4, 5], [2, 4, 5], [3, 4, 5], [1, 5, 6], [3, 5, 6], [2, 5, 6]]
答案 5 :(得分:1)
这种方法很有效,它不会按照你想要的方式改变内部列表。
list1 = sorted(list1)
list1[-1], list1[-2] = list1[-2], list1[-1]
print (list1)