Python 重复返回的数字多于所需的数字

Python 重复返回的数字多于所需的数字,python,Python,印刷品:[1,2,3,5,7,8,10,12,13] 7、9、10、11、12不应该在名单上。因为他们 不在较小的列表中 我做错了什么?您的代码依赖于这样的假设:语句 最大=a 将列表复制到最大值。这在Python中是不正确的。相反,这句话只是引用了旧的列表a 要正确复制列表,您的代码应如下所示: 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] if len(s

印刷品:[1,2,3,5,7,8,10,12,13] 7、9、10、11、12不应该在名单上。因为他们 不在较小的列表中


我做错了什么?

您的代码依赖于这样的假设:语句

最大=a

将列表复制到最大值。这在Python中是不正确的。相反,这句话只是引用了旧的列表a

要正确复制列表,您的代码应如下所示:

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]

if len(set(a)) > len(set(b)):  # finds the biggest list
    largest = a
    smallest = b
else:
    largest = b
    smallest = a

common = largest

for i in largest:
    if i not in smallest:
        common.remove(i)

print(common)
然后您将得到结果


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

您的代码依赖于以下假设:

最大=a

将列表复制到最大值。这在Python中是不正确的。相反,这句话只是引用了旧的列表a

要正确复制列表,您的代码应如下所示:

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]

if len(set(a)) > len(set(b)):  # finds the biggest list
    largest = a
    smallest = b
else:
    largest = b
    smallest = a

common = largest

for i in largest:
    if i not in smallest:
        common.remove(i)

print(common)
然后您将得到结果


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

您的行
common=max
不会将list
max
的值复制到新的list
common
中。而是使这两个变量都指向同一个列表。因此,当您在
最大的
上循环并从
公共
中删除时,您正在修改正在循环的列表。那是个坏主意

用计算机制作一份真实的副本

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]

if len(set(a)) > len(set(b)):  # finds the biggest list
    largest = list(a)
    smallest = list(b)
else:
    largest = list(b)
    smallest = list(a)

common = list(largest)

for i in largest:
    if i not in smallest:
        common.remove(i)

print(common)

然而,要获得两个列表中的元素的良好列表,一种更具python风格的方法就是单行

common = list(largest)

请注意,这将按排序顺序返回列表,这可能与原始顺序不同。

您的行
common=maximum
不会将list
maximum
的值复制到新列表
common
。而是使这两个变量都指向同一个列表。因此,当您在
最大的
上循环并从
公共
中删除时,您正在修改正在循环的列表。那是个坏主意

用计算机制作一份真实的副本

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]

if len(set(a)) > len(set(b)):  # finds the biggest list
    largest = list(a)
    smallest = list(b)
else:
    largest = list(b)
    smallest = list(a)

common = list(largest)

for i in largest:
    if i not in smallest:
        common.remove(i)

print(common)

然而,要获得两个列表中的元素的良好列表,一种更具python风格的方法就是单行

common = list(largest)

请注意,这将按排序顺序返回列表,这可能与原始顺序不同。

如果要获取两个集合中的项目,只需使用
set(a)&set(b)
。如果要获取两个集合中的项目,只需使用
set(a)&set(b)