1

我必须定义一个过程 union,它将两个列表作为输入。它应该将第一个输入列表修改为两个列表的集合并集。我假设第一个列表是一个集合,也就是说,它不包含重复的元素。

我试过这个,它的工作原理:

def union(a, b):
    a.append(b)
    for item in b:
        if item in a:
            a.remove(item)

当我尝试测试它时,这是输出:

a = [1,2,3] b = [2,4,6] union(a,b) 打印 a

我应该收到的输出是用于练习: [1,2,3,4,6]

我收到的输出是: [1, 3, [2, 4, 6]]

如何打印输出以匹配所需的输出?还是同样的事情?

4

3 回答 3

1

你为什么不使用一个set

def union(a, b):
    return list(set(a + b))

这不会修改您的列表,但设置未排序,因此您不能依赖元素的顺序。

如果您尝试在代码中查找错误,您可以像这样修改它:

def union(a, b):
    for item in b:
        if item in a:
            a.remove(item)
    a.extend(b)

如果你真的想向 a 添加新项目,你可以使用这个:

def union(a, b):
    a.extend([x for x in b if x not in a])
于 2013-07-27T13:29:20.517 回答
0

试试这个简单的方法:

def union(a, b):
    return list(set(a + b))
于 2013-07-27T13:53:38.570 回答
0
a = [1,2,3]
b = [2,4,6]

def union(a, b):
    set_a = set(a)
    for ele in b:
        if ele not in set_a:
            a.append(ele)
    return a

结果:

>>> union(a,b)
[1, 2, 3, 4, 6]

请注意,当您使用 时remove,列表中的第一个元素将被删除:

>>> a = [1,2,3,2,4,6]
>>> a.remove(2)
>>> a
[1, 3, 2, 4, 6]

因此,为了获得您想要的结果,我们必须保持a原样,并向其中添加b不是它的元素a

于 2013-07-27T13:47:08.357 回答