私はこのためにセットを使用する:
In [9]: set("aabbcc")
Out[9]: set(['a', 'c', 'b'])
In [10]: set(zip("aabbcc", [1, 1, 5, 5, 2, 2]))
Out[10]: set([('a', 1), ('c', 2), ('b', 5)])
とマッピングは全射である場合にのみ場合には、第2セットは第一の組に等しい長さを有するであろう。 (そうでない場合、あなたは第二セット、またはその逆に同じ番号に文字のマッピングの2つのコピーを持つことになります)
ここでは、これも返されますアイデア
def is_bijection(seq1, seq2):
distinct1 = set(seq1)
distinct2 = set(seq2)
distinctMappings = set(zip(seq1, seq2))
return len(distinct1) == len(distinctMappings) and len(distinct2) == len(distinctMappings)
を実装するコードです1つのシーケンスが他のシーケンスよりも短いが、有効なマッピングがすでに確立されている場合はtrueシーケンスの長さが同じでなければならない場合は、チェックを追加する必要があります。
a = "abcabc"とb = "123127"の場合は、どのような出力が得られますか?真または偽 – raton
偽です。 'c'は3と7の両方にマップされます(または、逆に3と7の両方が 'c'にマップされます)。バイジェクションでは、各要素は、もう1つのセットに1つだけの一致要素を持ちます。 –