为了账号安全,请及时绑定邮箱和手机立即绑定

仅包含 2 个输入列表之间共有的元素的列表(没有重复项我做不到)

仅包含 2 个输入列表之间共有的元素的列表(没有重复项我做不到)

梵蒂冈之花 2023-05-23 16:04:26
从两个列表中,返回一个列表,该列表仅包含 2 个输入列表之间共有的元素。无重复。输入: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]我的解决方案:common_list = [i for i in a if i in b]我的输出:[1, 1, 2, 3, 5, 8, 13]我需要的输出:[1, 2, 3, 5, 8, 13]
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

您可以使用设置操作


In [13]: 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]


In [14]: list(set(a) & set(b))

Out[14]: [1, 2, 3, 5, 8, 13]

您的代码的问题是输出中的重复元素。您可以通过在输出上应用 set 运算符来避免这种情况


common_list = list(set(i for i in a if i in b))


查看完整回答
反对 回复 2023-05-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您还可以这样做:


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]

set(a).intersection(b)

set(a) & set(b)我觉得这比因为对我来说感觉有点太“神奇”而更具可读性。


查看完整回答
反对 回复 2023-05-23
?
MM们

TA贡献1886条经验 获得超2个赞

您可以使用设置交集:


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]


out = list(set(a).intersection(set(b)))

print(out)

输出:


[1, 2, 3, 5, 8, 13]


查看完整回答
反对 回复 2023-05-23
  • 3 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信