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

2022-01-10 00:00:00 python python-3.x list duplicates

问题描述

问题是这样的,取两个列表,比如说这两个:

Problem is this, take two lists, say for example these two:

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]

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

And write a program that returns a list that contains only the elements that are common between the lists (without duplicates). Make sure your program works on two lists of different sizes.

这是我的代码:

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)

尽管有i not in c"语句,但我的输出仍然给我重复.为什么是这样?我敢肯定它很明显,我只是看不到它!

My output is still giving me duplicates despite the 'i not in c' statement. why is this? I'm sure its blatantly obvious, I just cant see it!


解决方案

  1. 您将包含 i 的列表附加到 c,因此 i not in c 将始终返回 <代码>正确.您应该单独附加 i:c.append(i)
  1. You are appending a list containing i to c, so i not in c will always return True. You should append i on its own: c.append(i)

或者

  1. 只需使用集合(如果顺序不重要):

  1. Simply use sets (if order is not important):

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).

EDIT As @Ev. Kounis suggested in the comment, you will gain some speed by using
c = set(a).intersection(b).

相关文章