使用类合并两个列表(Python)

时间:2018-10-04 00:31:13

标签: python python-3.x

所以我想创建两个列表对象,并使用MySet类中的函数union组合它们。到目前为止,我有

class MySet:
    def __init__(self, elements):
        self.elements=elements
    def union(self, sets):
        for i in self.elements:
            self.elements.append(sets)
            break
        for j in self.elements and sets
            #print j only once
            #idk if even the first part is the right syntax

所以我会用它

seta = MySet([1,2,3])
setb = MySet([1,10,11])
setc = seta.union(setb)

而且,我不希望它打印重复项。因此setc.elements应该输出[1,2,3,10,11]。 seta.elements仍应为[1,2,3],依此类推。谢谢。

4 个答案:

答案 0 :(得分:1)

Python Sets是执行此操作的好方法。

def union(self, new_set):
    seta = set(self.elements)
    setb = set(new_set)
    set_diff = setb - seta  # remove any overlap
    return self.elements + list(set_diff)

答案 1 :(得分:0)

如果您想要类似set的行为,请使用实际的sets

new_set = set(seta) + set(setb)  # seta & setb are lists

但是,如果您确实需要使用行为类似于列表的类,请将union()函数更改为:

def union(self, other_set):
    new_set = [i for i in self.elements]  # which is actually a list
    for j in other_set:
        if j not in self.elements:
            new_set.append(j)
    return new_set

首先,正在创建new_set作为self(seta)的副本。然后,将other_set(setb)中不存在的每个元素按顺序添加到新集合中。

答案 2 :(得分:0)

此设置将完成您要说的内容,只需设置将两个列表连接在一起的方法,如何调用这些方法就很重要。

class MySet:
    def __init__(self, elements):
        self.elements=elements
    def union(self,set_2):
        return list(set(self.elements) | set(set_2))

seta = MySet([1, 2, 3])
setb = MySet([1, 10, 11])
setc = seta.union(setb.elements)

print(seta.elements) # => [1, 2, 3]
print(setb.elements) # => [1, 10, 11]
print(setc) # => [1, 2, 3, 10, 11]

答案 3 :(得分:0)

@aneroid的答案很好,但是如果other_set大,则答案会很慢。使用集合是最具扩展性的选择之一。该顺序将被忽略。

def union(self, other_set):
    return list(set(self.elements).union(other_set))

如果您要保留订单,则对于非常大的other_set,设置对象会更快。

def union(self, other_set):
    new_set = [i for i in self.elements]  # which is actually a list
    set_obj = set(new_set)
    for j in other_set:
        if j not in set_obj:
            new_set.append(j)
    return new_set