私はペアから2つのペアを作りたいと思います。 ペアは2つの要素で構成され、2つのペアは2つのペアで構成されます。ここで は、制約のリストです:ペアでPythonで2つのペアを作る効率的な方法
- 、要素の順序は重要である:(要素1、要素2)=(要素2は、要素1)2ペアで
- は、ペアの順序はありません!重要:(PAIR1、PAIR2)==(PAIR2、PAIR1)
Iは次のように、上記の制約を満足する擬似コードを書いた:
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
class TwoPair:
def __init__(self, pair1, pair2):
assert isinstance(pair1, Pair)
assert isinstance(pair2, Pair)
self.pair1 = pair1
self.pair2 = pair2
def __eq__(self, other):
if not isinstance(other, TwoPair):
return False
if self.pair1 == other.pair1 and self.pair2 == other.pair2:
return True
if self.pair1 == other.pair2 and self.pair2 == other.pair1:
return True
return False
def __ne__(self, other):
return not (self.__eq__(other))
def __hash__(self):
return hash(self.pair1)^hash(self.pair2)
def getFirst(self):
return self.pair1
def getSecond(self):
return self.pair2
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
は私のコードでは時間がかかります。 2組の他の表現はありますか?または、上記のコードを改善できますか?
このコードはわかりません。あなたが解決しようとしている実際の用途は何ですか?一般に 'タプル'から派生することは、ここで車輪を再発明するのではなく、より良いアプローチである可能性が高い。このコードは、実際にはわかっていないコード化のような臭いがあります。 –