【问题标题】:How to remove everything except duplicates from a list?如何从列表中删除除重复项之外的所有内容?
【发布时间】:2021-01-09 11:04:20
【问题描述】:

我有一个列表 [ a , b , c , b , d] 我想删除一个 c 和 d,同时保留两个 b。

我该怎么做?

我希望我的最终列表是 [ b , b ]

【问题讨论】:

标签: list duplicates


【解决方案1】:

@Yodrangonface,这是 Python 版本:

from collections import Counter

lst = ['a', 'b', 'c', 'b', 'd']
duplicates = [k for k, v in Counter(lst).items() if v >= 2]
duplicates

输出: ['b']

【讨论】:

    【解决方案2】:

    这取决于您使用的编程语言。 例如在java中你可以这样处理:

    List<String> duplicateList = new ArrayList<>();
            duplicateList.add("Cat");
            duplicateList.add("Dog");
            duplicateList.add("Cat");
            duplicateList.add("cow");
            duplicateList.add("Dog");
            duplicateList.add("Cow");
            duplicateList.add("Goat");
    
        Set<String> duplicated = duplicateList
                .stream()
                // Grouping by number of occurrences
                .collect(Collectors.groupingBy(e -> e.toString(),Collectors.counting()))
                .entrySet()
                // Filtering of item with more than one occurrence
                .stream().filter(item->item.getValue()>1)
                .collect(Collectors.toMap(item -> item.getKey(), map -> map.getValue()))
                .keySet();
    
        System.out.println(duplicated);
    
        List<String> remaining = duplicateList.stream().filter(item->duplicated.contains(item)).collect(Collectors.toList());
    
        System.out.println(remaining);
    

    输出是:

    [Cat, Dog]
    [Cat, Dog, Cat, Dog]
    

    【讨论】:

      最近更新 更多