📜  Python|删除列表中重复少于 k 次的元素

📅  最后修改于: 2022-05-13 01:54:20.533000             🧑  作者: Mango

Python|删除列表中重复少于 k 次的元素

给定一个整数列表(元素可能重复),编写一个Python程序来删除重复少于 k 次的元素。

例子:

Input : lst = ['a', 'a', 'a', 'b', 'b', 'c'], k = 2
Output : ['a', 'a', 'a', 'b', 'b']

Input : lst = [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4], k = 3
Output : [1, 1, 1, 1, 3, 3, 3]

方法#1: Pythonic naive

collections module中的Counter()构造一个字典,将值映射到计数并将它们保存在“计数”中。然后我们使用 'temp_lst' 来存储需要删除的元素。最后,我们遍历给定的列表并将所有不在“temp_lst”中的元素附加到包含所需输出的“res_lst”中。

# Python3 program to Remove elements of 
# list that repeated less than k times
from collections import Counter
  
def removeElements(lst, k):
    counted = Counter(lst)
      
    temp_lst = []
    for el in counted:
        if counted[el] < k:
            temp_lst.append(el)
              
    res_lst = []
    for el in lst:
        if el not in temp_lst:
            res_lst.append(el)
              
    return(res_lst)
      
# Driver code
lst = ['a', 'a', 'a', 'b', 'b', 'c']
k = 2
print(removeElements(lst, k))
输出:
['a', 'a', 'a', 'b', 'b']

方法#2:有效的方法

使用Counter方法的有效方法是构造一个字典映射值到计数,然后使用列表推导过滤大于指定值的计数。这种方法既节省时间又节省空间。

# Python3 program to Remove elements of 
# list that repeated less than k times
from collections import Counter
  
def removeElements(lst, k):
    counted = Counter(lst)
    return [el for el in lst if counted[el] >= k]
      
# Driver code
lst = ['a', 'a', 'a', 'b', 'b', 'c']
k = 2
print(removeElements(lst, k))
输出:
['a', 'a', 'a', 'b', 'b']