Python cap列表中重复项的出现次数

qxsslcnc  于 2023-07-01  发布在  Python
关注(0)|答案(3)|浏览(83)

我正在寻找一个函数来限制列表中重复的数量。例如,在下面的列表中,我们有三个'1',一个'2',两个'a'和三个'b'

initial_list = [1,2,1,1,'a','b','a', 'b','b']

def cap(initial_list, n=2)

如果我将重复的数量限制为n=2,我会得到:

[1,2,1,'a','b','a', 'b']

输出中各项的顺序无关紧要。

kknvjkwl

kknvjkwl1#

您需要跟踪遇到的值的数量。您可以使用字典(defaultdict更好(UPD:正如评论中所建议的Counter甚至更好)):

from collections import Counter

def cap(initial_list, n=2):
    counter = Counter()
    result = []
    for e in initial_list:
        if counter[e] < n:
            result.append(e)
            counter[e] += 1
    return result

initial_list = [1,2,1,1,'a','b','a', 'b','b']
cap(initial_list)

输出:

[1, 2, 1, 'a', 'b', 'a', 'b']
ercv8c1e

ercv8c1e2#

你可以使用一个dict来计算重复的数量,而不需要使用任何库

def cap(initial_list, n=2):
    counts = {}
    result = []
    for item in initial_list:
        if item not in counts:
            counts[item] = 1
            result.append(item)
        else:
            if counts[item] < n:
                counts[item] += 1
                result.append(item)
    return result

initial_list = [1,2,1,1,'a','b','a', 'b','b']
cap(initial_list, 2)

输出:

[1, 2, 1, 'a', 'b', 'a', 'b']
5kgi1eie

5kgi1eie3#

collections.Counter:根据给定阈值检查频率,并通过逐个案例研究更新结果。

from collections import Counter

def cap(initial_list, n=2):
    res = []

    for k, f in Counter(initial_list).items():
        # check frequency of term in list
        if f <= n:
            res.extend([k]*f)
        else:
            res.extend([k]*n)

    return res

initial_list = [1,2,1,1,'a','b','a', 'b','b']

res = cap(initial_list, 2)

相关问题