求通过双列表对比移除重复项的实现代码
实现列表去重(保留list1独有的元素)
需求说明:
现有list1、list2,需要生成list3,其中包含所有只在list1中出现、不在list2中出现的元素,且保留这些元素在list1中的原有顺序。
示例:
- list1:
<british> <electric> <kettle> <and> <bottle> <of> <water>- list2:
<british> <electric> <bottle> <water>- list3:
<kettle> <and> <of>
Python 实现
如果需要保留元素在list1中的顺序,不要直接用集合(集合会打乱顺序),可以用列表推导式结合集合提升查询效率:
list1 = ["british", "electric", "kettle", "and", "bottle", "of", "water"] list2 = ["british", "electric", "bottle", "water"] list2_set = set(list2) list3 = [item for item in list1 if item not in list2_set] print(list3) # 输出: ['kettle', 'and', 'of']
如果不关心元素顺序,也可以直接用集合差集操作:
list3 = list(set(list1) - set(list2)) # 注意:输出顺序可能和原list1不一致
JavaScript 实现
使用filter方法配合Set实现,保留原顺序:
const list1 = ["british", "electric", "kettle", "and", "bottle", "of", "water"]; const list2 = ["british", "electric", "bottle", "water"]; const list2Set = new Set(list2); const list3 = list1.filter(item => !list2Set.has(item)); console.log(list3); // 输出: ['kettle', 'and', 'of']
Java 实现
用ArrayList遍历结合HashSet优化查询:
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Main { public static void main(String[] args) { List<String> list1 = List.of("british", "electric", "kettle", "and", "bottle", "of", "water"); List<String> list2 = List.of("british", "electric", "bottle", "water"); Set<String> list2Set = new HashSet<>(list2); List<String> list3 = new ArrayList<>(); for (String item : list1) { if (!list2Set.contains(item)) { list3.add(item); } } System.out.println(list3); // 输出: [kettle, and, of] } }
内容的提问来源于stack exchange,提问作者Siwan Kim
相关产品推荐
相关产品推荐

