如何获得最高的4元组值?

2024-04-20 06:51:57 发布

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

我试图得到元组列表中最高的4个值,并将它们放入一个新列表中。但是,如果有两个元组具有相同的值,我希望取数字最小的元组。你知道吗

列表最初如下所示:

[(9, 20), (3, 16), (54, 13), (67, 10), (2, 10)...]

我希望新的列表如下:

[(9,20), (3,16), (54, 13), (2,10)]

这是我目前的代码有什么建议吗?你知道吗

sorted_y = sorted(sorted_x, key=lambda t: t[1], reverse=True)[:5]
sorted_z = []
while n < 4:
    n = 0
    x = 0
    y = 0
    if sorted_y[x][y] > sorted_y[x+1][y]:
        sorted_z.append(sorted_y[x][y])
        print(sorted_z)
        print(n)
        n = n + 1
    elif sorted_y[x][y] == sorted_y[x+1][y]:
        a = sorted_y[x]
        b = sorted_y[x+1]
        if a > b:
            sorted_z.append(sorted_y[x+1][y])
        else:
            sorted_z.append(sorted_y[x][y])
        n = n + 1
        print(sorted_z)
        print(n)

编辑:当谈到最低值时,我指的是元组第二个值中的最高值,如果两个第二个值相同,我想取两个值中最低的第一个值。你知道吗


Tags: lambdakey代码true列表if数字建议
2条回答

你可以试试这个:

l = [(9, 20), (3, 16), (54, 13), (67, 10), (2, 10)]
asv = set([i[1] for i in l])  # The set of unique second elements
new_l = [(min([i[0] for i in l if i[1]==k]),k) for k in asv]

输出

[(3, 16), (2, 10), (9, 20), (54, 13)]

groupby呢?你知道吗

from itertools import groupby, islice
from operator import itemgetter

data = [(9, 20), (3, 16), (54, 13), (67, 10), (2, 10)]
pre_sorted = sorted(data, key=itemgetter(1), reverse=True)

result = [sorted(group, key=itemgetter(0))[0] for key, group in islice(groupby(pre_sorted, key=itemgetter(1)), 4)]
print(result)

输出:

[(9, 20), (3, 16), (54, 13), (2, 10)]

说明:

第一个元素按第二个元素的值降序排列数据。groupby然后将它们放入组中,其中组中的每个tuple对于第二个元素具有相同的值。你知道吗

使用islice,我们选取前四个组,并按照第一个元素的值按升序对每个组进行排序。取每组的第一个值,我们就得到了答案。你知道吗

相关问题 更多 >