我很难搞清楚如何初始化课程。所以,当我这样做时,我得到一个结果,但它也返回布尔类型。我只想让它返回任何想法的正常数字?恩。赔率
class DictSet:
def __init__(self, elements):
self.elements = {}
for i in elements:
self.elements[i] = True
def addElement(self, x):
self.elements.update(x)
def deleteElement(self, x):
for i in (self.elements):
if i == x:
del self.elements[x]
def member(self, x):
for i in (self.elements):
if i == x:
return True
return False #Checks if its an item
def intersection(self, set2):
add = []
for i in self.elements:
if i in set2.elements:
add.append(i)
return DictSet(add) # Returns Intersected New List
def union(self, set2):
return DictSet(list(self.elements.keys()) + list(set2.elements.keys())) #Puts all the elements together
def subtract(self, set2):
sub = []
for i in self.elements:
if i not in set2.elements:
sub.append(i)
return DictSet(sub) # Only return ones set of elements
def __repr__(self):
return "<Set: " + str(self.elements) + ">"
def main():
all = DictSet([1,2,3,4,5,6,7,8,9,10])
odds = DictSet([1,3,5,7,9])
evens = DictSet([2,4,6,8,10])
print("all", odds.union(evens))
print("all", evens.union(odds))
print("empty", odds.intersection(evens))
print("odds", all.intersection(odds))
print("odds", all.subtract(evens))
if __name__ == '__main__':
main()
无法正确格式化,因此会出现一些格式问题
答案 0 :(得分:0)
由于您不想使用字典的值,而只想使用键,因此使用set
代替dict
更合适:
set对象是不同的可哈希对象的无序集合。
答案 1 :(得分:0)
我并不完全清楚你想要完成的事情,但我可以告诉你为什么你会得到你得到的输出。
首先,我要注意,它是__repr__
函数,用于确定在对象上调用print
时对象的显示方式。在__repr__
方法中,您有语句return "<Set: " + str(self.elements) + ">"
。您的字段self.elements
。是一本字典。如果在字典上使用str()
函数,它会将字典转换为以{
开头并以}
开头的字符串,以便列出每个键/值对。您的密钥是整数1到10,并且您已将所有值设置为True
(根据您的__init__
)。所以,对于你给我们的代码,你会看到输出:
('all', <Set: {1: True, 2: True, 3: True, 4: True, 5: True, 6: True, 7: True, 8: True, 9: True, 10: True}>)
因为self.elements
str()方法产生输出{1: True, 2: True, 3: True, 4: True, 5: True, 6: True, 7: True, 8: True, 9: True, 10: True}
。如果您只想显示('all', <Set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>)
,那么您需要将__repr__
更改为仅显示self.elements
的键(而不是键和值)。你可以这样做:
__repr__(self):
return "<Set: " + str([key for key in self.elements]) + ">"
[key for key in self.elements]
按self.elements
字典字段创建一个按键列表,每list comprehension。
或者,既然您已经在其他代码中使用了类似的内容,那么您可以这样做:
__repr__(self):
return "<Set: " + str(self.elements.keys()) + ">"
我认为__repr__
的最后一个定义更清晰一点,第一个就是突然出现的问题。
我还要注意,如果我所描述的输出是您的最终目标,那么您不需要self.elements
的字典类型。使用列表会更清楚/更好。