gpt4 book ai didi

python - 从 Python 列表中删除一些重复项

转载 作者:太空狗 更新时间:2023-10-30 01:13:00 26 4
gpt4 key购买 nike

我想删除列表中一定数量的重复项,而不是全部删除。例如,我有一个列表 [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)

有没有办法一次性删除列表中的三个 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

用法如下:

lst = [1,2,3,4,4,4,4,4]
print list(remove_n_dupes(lst, 4, 3)) # [1, 2, 3, 4, 4]

如果我们使用一些额外的辅助存储,则保持指定数量的任何副本同样容易:

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

用法类似:

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]

此处的输入是列表和您要保留的最大项目数。需要注意的是,这些项目需要是可散列的...

关于python - 从 Python 列表中删除一些重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com