两个列表统计特定元素并在特定ru上聚合

2024-05-17 05:42:16 发布

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

嗨,我偶然发现了一些我想不出解决办法的问题。 我有两个列表list1=[2,5,7]list2=[4,6,9]以及以下变量

counter1=[], counter2=[] # Counter of each list,
sum1=[], sum2=[] # Sum of highest elements

我想从列表中选择前三个最高的元素,在本例中9,7,6(列表1中的9,7和列表2中的6)。因此,我需要映射每个数字所属的列表,例如9,7到list1,因此我需要增加计数器变量来计算每个列表中前3个元素的数量,在我们的玩具示例中,counter1=[2]和counter2=[1]。你知道吗

此外,我还需要增加sum1,以便从每个列表中获取每个top3的总和,例如sum1=[9+6=15]和sum2=[7]。你知道吗

你想帮助我们解决这个难题吗?欢迎提出任何解决问题的方法。最后但并非最不重要的一点是,我们可以建议如何针对不同的场景进行构建,例如,代替top3元素,比如说top5,以及如何将其包装到函数中。你知道吗

注意。我不能在两个列表中都有相同的数字。你知道吗


Tags: of元素列表counter数字listeachlist2
1条回答
网友
1楼 · 发布于 2024-05-17 05:42:16

有许多可能的解决办法。在我看来这是最简单的:

import heapq

list1 = [2,5,7]
list2=[4,6,9]

counter1=0
counter2=0

sum1=0
sum2=0

full_list = list1 + list2
three_largest = heapq.nlargest(3,full_list)

for n in three_largest:
    if n in list1:
        list1.remove(n)
        counter1+=1
        sum1+=n
    else:
        list2.remove(n)
        counter2+=1
        sum2+=n

print(counter1)
print(counter2)
print(sum1)
print(sum2)

请注意,您在示例中对所提供的值犯了一个错误。9在列表2中

编辑

下面是一个处理NM列表中最高数字的示例:

import heapq
from typing import List

list_of_lists = [[1,2,3,4],[4,3,7,12],[8,8,10,1]]



def quick_metric(n_highest,lists:List[List[int]]):
    counters = [0 for i in range(len(lists))]
    sums = [0 for i in range(len(lists))]
    flat_list = [item for sublist in lists for item in sublist]
    highest = heapq.nlargest(n_highest, flat_list)

    for n in highest:
        for x_list in lists:
            if n in x_list:
                x_list.remove(n)
                counters[lists.index(x_list)]+=1
                sums[lists.index(x_list)]+=n
                break

    print(counters)
    print(sums)
    print(highest)


quick_metric(3,list_of_lists)

输出:

[0, 1, 2]
[0, 12, 18]
[12, 10, 8]

相关问题 更多 >