2017-04-01 32 views
0

如果我有Python中尋找扭轉元組中的一組

Set = {(0,1), (1,1), (1,0)} 

我怎樣才能確定是否(A,B)(B,A)是存在於集?

也就是說上述設置將返回true,這一套:

Set = {(0,1), (1,1), (1,2), (1,0)} #missing (2,1) 

將返回false?

回答

2
all(tup[::-1] in Set for tup in Set) 

對於集合中的每個元素,我們要求該元素的反轉在集合中。上面的代碼是將該問題定義轉化爲Python的一個非常直接的翻譯。

+0

'{1,2} 文件 「C:/Users/Tristan/PycharmProjects/pythontut.py」,第67行,在 {(0,1),(1,0),(1 ,1)} b = all(tup [:: -1] in Set for tup in Set) 文件「C:/Users/Tristan/PycharmProjects/pythontut.py」,第67行, b = all tup [:: - 1]設置爲集合中的tup) TypeError:'int'object is not subscriptable' – Coder117

+0

我在嘗試解決方案時遇到了這些錯誤。有小費嗎? – Coder117

+0

@ Coder117:你的設定不是你想象的那樣。 – user2357112

0

你可以用一個循環完成你的目標。

Set = {(0,1), (1,1), (1,2), (1,0)} 
helpSet = set() 
for tup in Set: 
    if tup[0] == tup[1]: continue 
    elif tup in helpSet: 
     helpSet.remove(tup) 
    elif tup[::-1] in helpSet: 
     helpSet.remove(tup[::-1]) 
    else: 
     helpSet.add(tup) 
print(helpSet) 
+0

串化是毫無意義和錯誤的。這在像{{(1111),(11,111)}'這樣的輸入上失敗。 – user2357112

+0

@ user2357112:字符串化沒有意義,但有助於閱讀和理解。 – obgnaw

+0

元組工作得很好。沒有理由將元組元素轉換爲字符串並將它們混合在一起;這只是引入了錯誤。 – user2357112