Reputation: 1
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
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
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