2017-01-16 6 views
2

私はボットをタプルに変換するという2つの言い回しがあります。両方の辞書には同じ要素が含まれていますが、同じロジックを使用して生成されるわけではありません。例えばタプルと要素の順序が一致しない

だが、私はこのようなタプルを持っているとしましょう:

(('a',5),('n',4),('c',8)) 

そして、第二組は、そのようなものです:

(('c',8),('n',4),('a',5)) 

彼らの元dictsは、私はできませんが、おそらく(そのようなものですどの要素がディクテーション内でどのように順序付けられるのか知っていますが、同じ要素を含む2つのディクテーションから生成されます(それ以上はありません)。

{'a':5,'c': 8,'n':4} 

人間の場合、両方のタプルは似ていますが、コンピュータの場合はそうではありません。

2つのタプルが類似しているかどうかを確認するにはどうすればよいですか?

答えて

4

tupleを並べ替えて比較します。たとえば:

>>> tuple_1 = (('a',5),('n',4),('c',8)) 
>>> tuple_2 = (('c',8),('n',4),('a',5)) 

# Non-sorted --> unequal; issue you are currently facing 
>>> tuple_1 == tuple_2 
False 

# comparing sorted tuples -- equal 
>>> sorted(tuple_1) == sorted(tuple_2) 
True 

タプルの両方の要素がユニークある場合は、としてもsetを使用して経由して、それらを比較することができる:サイドノートとして

>>> set(tuple_1) == set(tuple_2) 
True 

、あなたはしないでください辞書の内容を比較するには、dicttupleに変換する必要があります。あなたが直接としてdictオブジェクトを比較することがあります。

>>> {1: 2, 3: 4} == {3: 4, 1: 2} 
True 
1
def similarTuple(a,b): 
    h = {} 
    for e in a: 
     h[e] = True 
    for e in b: 
     if e not in h: 
      return False 
    return True 
2

またdictにタプルを変換し、それらを比較することができます。

これがより速く/遅く/並べ替えるのと同じかどうかはわかりません。

dict(t1) == dict(t2) 
+1

タプルwiからdictを作成するための複雑さ「N」になります。しかし、タプルの2つの要素が同じオブジェクトをインデックス0に持つ場合、これは失敗します。しかし、再び、OPは 'dict'から' tuple'を作成しているので、彼の必要条件を満たすでしょう。しかし、一般化された方法でタプルを比較する他の人には当てはまりません。 –

0

また、両方のタプルのセットを作り、それらを比較することができます:

リスト内包から多分面白い、

効率的ではないブール結果を得る模索し、1つのライナーのためにしようとして

a = (('a', 0), ('b', 1), ('c', 2)) 
b = (('b', 1), ('a', 0), ('c', 2)) 
set(a) == set(b) 
+1

は、同じタプルが2回以上出現すると機能しません。 –

0

def SameElementsP(a,b): 
    return not ([1 for e in a if e not in b] or [1 for e in b if e not in a])  
関連する問題