列表推导式中引用当前列表:如何单行实现无重复交集?
解决两个列表的无重复交集单行代码问题
嘿,这问题我熟!你想要的是同时存在于列表a和b中且无重复的元素,还要用单行代码实现对吧?给你几个靠谱的单行方案:
方案1:利用集合自动去重(简洁高效)
集合天生自带元素唯一性,还支持交集操作,一行就能搞定:
list2 = list(set(a) & set(b))
或者用更直观的intersection方法写:
list2 = list(set(a).intersection(set(b)))
这两种写法都会先把两个列表转成集合,取它们的交集后再转回列表,自动帮你过滤掉所有重复项。
方案2:保留原列表元素顺序(如果需要)
要是你希望结果里元素的顺序和它们在列表a中第一次出现的顺序一致,那可以用这个单行写法:
list2 = list(dict.fromkeys(x for x in a if x in b))
dict.fromkeys会自动保留第一个出现的键(也就是元素),后面重复的会被直接忽略,既满足去重需求,又能维持原列表的元素顺序。
拿你的示例列表测试:
- a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
- b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
方案1的结果(顺序可能因集合实现略有不同):[1, 2, 3, 5, 8, 13]
方案2的结果:[1, 2, 3, 5, 8, 13](和a里元素第一次出现的顺序完全一致)
内容的提问来源于stack exchange,提问作者user7173965
相关产品推荐
相关产品推荐

