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

Cha*_*ler 0 python list duplicates python-3.x

问题是这样,拿两个清单,例如说这两个:

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]
Run Code Online (Sandbox Code Playgroud)

并编写一个程序,该程序返回一个列表,该列表仅包含列表之间的公共元素(无重复项)。确保您的程序可以在两个不同大小的列表上运行。

这是我的代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

Dee*_*ace 5

  1. 要附加包含列表ic,因此i not in c始终返回True。您应该i自己附加:c.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}
    
    Run Code Online (Sandbox Code Playgroud)

编辑为@Ev。Kounis在评论中建议,您可以使用提高速度
c = set(a).intersection(b)

  • `set(a).intersect(b)` 不会稍微快一点,因为它避免了转换为第二个 `list` 的 `set` 吗? (2认同)