Jac*_*ond 5 python list duplicates
我想删除列表中的一定数量的重复项而不删除所有列表.例如,我有一个列表[1,2,3,4,4,4,4,4],我想要删除4个中的3个,这样我就可以了[1,2,3,4,4].一个天真的方式可能会这样做
def remove_n_duplicates(remove_from, what, how_many):
for j in range(how_many):
remove_from.remove(what)
Run Code Online (Sandbox Code Playgroud)
有没有办法在列表中一次删除三个4,但保留另外两个.
如果您只想n从列表中删除第一次出现的内容,使用生成器很容易:
def remove_n_dupes(remove_from, what, how_many):
count = 0
for item in remove_from:
if item == what and count < how_many:
count += 1
else:
yield item
Run Code Online (Sandbox Code Playgroud)
用法如下:
lst = [1,2,3,4,4,4,4,4]
print list(remove_n_dupes(lst, 4, 3)) # [1, 2, 3, 4, 4]
Run Code Online (Sandbox Code Playgroud)
如果我们使用一些额外的辅助存储,保持指定数量的任何项目的副本同样容易:
from collections import Counter
def keep_n_dupes(remove_from, how_many):
counts = Counter()
for item in remove_from:
counts[item] += 1
if counts[item] <= how_many:
yield item
Run Code Online (Sandbox Code Playgroud)
用法类似:
lst = [1,1,1,1,2,3,4,4,4,4,4]
print list(keep_n_dupes(lst, 2)) # [1, 1, 2, 3, 4, 4]
Run Code Online (Sandbox Code Playgroud)
此处输入是您要保留的列表和最大项目数.需要注意的是,这些物品需要可以清洗......
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |