两个列表之间没有重复的共同元素

新手上路,请多包涵

问题是这样的,拿两个列表,例如这两个:

 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]

并编写一个程序,返回一个列表,该列表仅包含列表之间共有的元素(没有重复项)。确保您的程序适用于两个不同大小的列表。

这是我的代码:

 a = [1, 1, 2, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = []
for i in a:
    if i in b and i not in c:
        c.append([i])
print(c)

尽管“我不在 c”声明中,我的输出仍然给我重复项。为什么是这样?我确定它非常明显,我只是看不到它!

原文由 Charlie Miller 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 603
2 个回答
  1. 您正在 True 包含 i c i not in c 您应该单独附加 ic.append(i)

或者

  1. 只需使用集合(如果顺序不重要):
    a = [1, 1, 2, 2, 3, 5, 8, 13, 21, 34, 55, 89]
   b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
   c = set(a) & set(b)  #  & calculates the intersection.
   print(c)
   #  {1, 2, 3, 5, 8, 13}

编辑 为@Ev。 Kounis 在评论中建议,您将通过使用获得一些速度

c = set(a).intersection(b)

原文由 DeepSpace 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用列表理解,我认为如果按以下方式实现它会很简短

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]
[i for i in a and b if i in a and b]

结果:

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

原文由 Bee 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题