所以我想创建两个列表对象,并使用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],依此类推。谢谢。
答案 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