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

标签 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)

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

相关文章:

python - 为什么我在使用 Dataflow 管道时遇到 "Error syncing pod"?

c# - 解析包含数组的字符串

java - 为什么在这种情况下 equals 会返回 false?

R 删除字符向量中的重复元素,而不是重复的行

Python-Sphinx:来自父类(super class)的 "inherit"方法文档

表示范围的 Python 条形图

javascript - 使用 Python 从网站下载 Javascript 文件

JAVA - 使用列表重构多个 "instanceof"

arrays - 不使用哈希表从数组中删除重复项

PHP防止重复发布