Yodragonface
Yodragonface

Reputation: 1

How to remove everything except duplicates from a list?

I have a list [ a , b , c , b , d] I want to remove a c and d, while keeping both of the b's.

How do I do this?

I want my end list to be [ b , b ]

Upvotes: 0

Views: 50

Answers (2)

Daniel Hao
Daniel Hao

Reputation: 4980

@Yodrangonface, this is for Python version:

from collections import Counter

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

Output: ['b']

Upvotes: 1

Polla Toube
Polla Toube

Reputation: 178

This depend on which programming langage your are using. For instance in java you could handle it that way:

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);

output is:

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

Upvotes: 0

Related Questions