好的,所以我正在尝试很长时间来完成这个程序。我的问题是我可以使用sorted
命令对列表的一部分/切片进行排序。
好的更多上下文我的程序的目的是输入一个任意排列的元组列表,然后由第二个元素然后由第一个元素排序。
比如说。列表[(12, 2), (13, 4), (11, 1), (14, 2), (7, 2)]
已通过;该函数应首先将其排序为[(11, 1), (12, 2), (14, 2), (7, 2), (13, 4)]
,然后将[(11, 1), (7, 2), (12, 2), (14, 2), (13, 4)]
排序为第一部分,但我陷入了第二部分。这是我试过的:
def Sort(l):
l = sorted(l, key=lambda l: l[1]) #for the first sort
i = 0
while i < len(l)-1:
if l[i][1] == l[i+1][1]:
z=i
y = i +1
print(z,i)
while l[z][1] == l[z+1][1] and z < len(l)-1 and y<len(l) -1 :
print(z)
if l[z][0] > l[y][0]:
(l[z],l[z+1]) = (l[z+1],l[z])
print('if',l)
y = y+1
i= i+1
i = i+1
print(l)
return l
我如何实现第二部分!我是python的新手!
答案 0 :(得分:3)
使用操作员模块中的itemgetter
。
from operator import itemgetter
keyfunc = itemgetter(1, 0) # sort by index 1, then index 0
sorted(l, key=keyfunc)
# [(11, 1), (7, 2), (12, 2), (14, 2), (13, 4)]
答案 1 :(得分:2)
如果我理解你的逻辑,你只需使用sorted
:
sorted(l, key=lambda x: (x[1], x[0]))
>>> [(11, 1), (7, 2), (12, 2), (14, 2), (13, 4)]