看板 Python 關於我們 聯絡資訊
如果三個變數,互相都不等於。羅輯上是 x != y != z 但是這樣寫是錯的,必需寫成: x != y and x != z and y != z 那如果要多個變數,互相都不相等, 舉個例子,例如,5個變數互不相等, 即 x != y != z != I != j 那有啥簡潔又正確的寫法嗎? 我是問Python 3, 謝謝。 ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.42.3 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1590227109.A.0D3.html
cuteSquirrel: https://onlinegdb.com/SkbFX_Ls8 05/23 17:57
Yshuan: 推 取set很棒 05/23 18:04
pmove: C大好方法,也就是 5 == len(set(x,y,z,I,j)) 05/23 18:10
pmove: 但是如果 x,y,z,I,j 是class, 那就無法用set, 這時有無好方 05/23 18:12
pmove: 法? 05/23 18:12
TitanEric: 感覺用all也可以 05/23 18:12
TitanEric: class有override equal跟hash就可以 05/23 18:13
outshaker: class可以用id 或 hash 來判斷阿 05/23 18:20
pmove: 例如變數是list的情況,x=[2,1,1], y=[1,2,1], z=[2,1,1], 05/23 18:49
pmove: I=[1,1,2], j=[2,2,1]. 這種情況set((x,y,z,I,j))會有錯, 05/23 18:49
pmove: 有何好方法? 05/23 18:49
pmove: 轉成tuple是一種方法 05/23 18:53
pmove: Ok, 感謝以上各位大大的回答 05/23 18:54
vi000246: 如果是複雜情況就override equal再用for loop判斷吧 05/23 19:52
outshaker: 複雜變數要檢查互不相等,就寫迴圈檢查阿 05/23 19:54
zerof: operator.ne 05/23 20:30
ddavid: 如果該class可以被sort的話,單純的兩兩比較是O(n^2),先 05/23 20:30
ddavid: sort後只比較相鄰元素是O(nlogn + n) = O(nlogn)會好一點 05/23 20:31
ddavid: 另外上面提到hash也是一種方式,就是看看要花多少額外空間 05/23 20:32
pmove: 回z大, operator.ne只能傳入兩個arguments的樣子,沒法多個 05/23 22:03
alvinlin: 我感覺原來的最簡潔好懂。不知道為何要緣木求魚。x != y 05/24 03:25
alvinlin: and x != z and y != z不是挺好的 05/24 03:25
oToToT: 他應該試想處裡有很多變數的情況吧,例如1000個之類的 05/24 14:46
zerof: ....你可以用 list comprehension +zip 05/24 17:32
zerof: zip 會漏, itertools.combinations 才對 05/24 18:08
alan23273850: 這種問題 stackoverflow 上面應該很多ㄅ 05/24 18:28
pmove: 回z大, combinations我知,不過很多變數的情況,個人覺得c 05/24 20:42
pmove: 大的set法,速度會比較快 05/24 20:42
s860134: 直覺 hash table 查數量確實會快一點 05/30 18:02