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']