我想从一对到两对。 一对由两个元素组成,两个对由两个对组成。 以下是约束列表:
我编写了满足上述约束的伪代码,如下所示:
class Pair:
def __init__(self, element1, element2):
assert isinstance(element1, Element)
assert isinstance(element2, Element)
self.element1 = element1
self.element2 = element2
def __eq__(self, other):
if not isinstance(other, Pair):
return False
if self.element1 != other.element1:
return False
if self.element2 != other.element2:
return False
return True
def __ne__(self, other):
return not (self.__eq__(other))
def __hash__(self):
return hash(self.element1) ^ hash(self.element2)
def getFirst(self):
return self.element1
def getSecond(self):
return self.element2
^{pr2}$
def makeTwoPairs(allPairs):
allTwoPairs = set([])
for pair1 in allPairs:
for pair2 in allPairs:
if pair1 == pair2:
continue
twoPair = TwoPair(pair1, pair2)
if twoPair in allTwoPairs:
continue
else:
allTwoPairs.add(twoPair)
return allTwoPairs
函数makeTwoPairs
在我的代码中花费了很长时间。有没有其他两对的表示法?或者,上面的代码可以改进吗?在
你有什么理由需要自己编写类吗?我在您的规范中没有看到任何不能通过使用元组作为对和将集合作为两对来满足的。在
但是,如果你决定优化你自己的代码,总是从评测开始。谷歌“Python简介”和阅读前五个链接,如果你不确定如何。在
坚持使用标准的python数据结构可能会更好。}用于
tuple
用于Pair
,而{TwoPair
(尽管您可以编写一个set
子类来添加__hash__
方法)。在例如:
考虑到您的
^{pr2}$makeTwoPairs
函数需要很长时间才能执行,您可以这样重写它:然后,您将只生成unique
TwoPairs
,而不会产生组合爆炸或每次向结果集添加新对之前的测试开销。在相关问题 更多 >
编程相关推荐