【发布时间】:2021-01-09 11:04:20
【问题描述】:
我有一个列表 [ a , b , c , b , d] 我想删除一个 c 和 d,同时保留两个 b。
我该怎么做?
我希望我的最终列表是 [ b , b ]
【问题讨论】:
-
这能回答你的问题吗? Identify duplicates in a List
标签: list duplicates
我有一个列表 [ a , b , c , b , d] 我想删除一个 c 和 d,同时保留两个 b。
我该怎么做?
我希望我的最终列表是 [ b , b ]
【问题讨论】:
标签: list duplicates
@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']
【讨论】:
这取决于您使用的编程语言。 例如在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]
【讨论】: