我可以用排序的

2024-04-26 07:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我想花很长时间来做这个节目。我的问题是,我可以使用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!你知道吗


Tags: and函数命令程序目的元素列表len
2条回答

如果我正确地理解了您的逻辑,您可以通过使用sorted来实现这一点:

sorted(l, key=lambda x: (x[1], x[0]))

>>> [(11, 1), (7, 2), (12, 2), (14, 2), (13, 4)]

使用操作符模块中的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)]

相关问题 更多 >