我很难弄清楚我应该如何初始化我的类。所以,当我这样做的时候,我会得到一个结果,但它也会返回布尔类型。我只想让它返回正常的数字有什么想法吗?例如赔率
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()
无法正确格式化,所以会有一些格式化问题
因为您不想使用字典的值,而只想使用键,所以使用^{} 而不是
dict
更合适:现在还不完全清楚你想要完成什么,但是我可以告诉你为什么你会得到你想要的结果。你知道吗
首先,我想指出的是
__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]
根据list comprehension从self.elements
字典字段创建键列表。你知道吗或者,由于您的其他代码中已经有类似的内容,您可以执行以下操作:
__repr__(self): return "<Set: " + str(self.elements.keys()) + ">"
我认为
__repr__
的最后一个定义更清楚一点,第一个定义就是我脑海中立刻浮现的。你知道吗我还想指出的是,如果我所描述的输出是您的最终目标,那么
self.elements
就不需要字典类型。只使用一个列表会更清楚/更好。你知道吗相关问题 更多 >
编程相关推荐