[问题] x!=y!=z!=I!=j 这样如何简洁写?

楼主: pmove (金疾柠檬)   2020-05-23 17:45:07
如果三个变量,互相都不等于。罗辑上是
x != y != z
但是这样写是错的,必需写成:
x != y and x != z and y != z
那如果要多个变量,互相都不相等,
举个例子,例如,5个变量互不相等,
即 x != y != z != I != j
那有啥简洁又正确的写法吗?
我是问Python 3, 谢谢。
作者: cuteSquirrel (松鼠)   2020-05-23 17:57:00
作者: Yshuan (倚絃)   2020-05-23 18:04:00
推 取set很棒
楼主: pmove (金疾柠檬)   2020-05-23 18:10:00
C大好方法,也就是 5 == len(set(x,y,z,I,j))但是如果 x,y,z,I,j 是class, 那就无法用set, 这时有无好方法?
作者: TitanEric (泰坦)   2020-05-23 18:12:00
感觉用all也可以class有override equal跟hash就可以
作者: outshaker (out)   2020-05-23 18:20:00
class可以用id 或 hash 来判断阿
楼主: pmove (金疾柠檬)   2020-05-23 18:49:00
例如变量是list的情况,x=[2,1,1], y=[1,2,1], z=[2,1,1],I=[1,1,2], j=[2,2,1]. 这种情况set((x,y,z,I,j))会有错,有何好方法?转成tuple是一种方法Ok, 感谢以上各位大大的回答
作者: vi000246 (Vi)   2020-05-23 19:52:00
如果是复杂情况就override equal再用for loop判断吧
作者: outshaker (out)   2020-05-23 19:54:00
复杂变量要检查互不相等,就写循环检查阿
作者: zerof (猫橘毛发呆雕像)   2020-05-23 20:30:00
operator.ne
作者: ddavid (谎言接线生)   2020-05-23 20:30:00
如果该class可以被sort的话,单纯的两两比较是O(n^2),先sort后只比较相邻元素是O(nlogn + n) = O(nlogn)会好一点另外上面提到hash也是一种方式,就是看看要花多少额外空间
楼主: pmove (金疾柠檬)   2020-05-23 22:03:00
回z大, operator.ne只能传入两个arguments的样子,没法多个
作者: alvinlin (林矜业)   2020-05-24 03:25:00
我感觉原来的最简洁好懂。不知道为何要缘木求鱼。x != yand x != z and y != z不是挺好的
作者: oToToT (屁孩)   2020-05-24 14:46:00
他应该试想处里有很多变量的情况吧,例如1000个之类的
作者: zerof (猫橘毛发呆雕像)   2020-05-24 17:32:00
....你可以用 list comprehension +zipzip 会漏, itertools.combinations 才对
作者: alan23273850   2020-05-24 18:28:00
这种问题 stackoverflow 上面应该很多ㄅ
楼主: pmove (金疾柠檬)   2020-05-24 20:42:00
回z大, combinations我知,不过很多变量的情况,个人觉得c大的set法,速度会比较快
作者: s860134 (s860134)   2020-05-30 18:02:00
直觉 hash table 查数量确实会快一点

Links booklink

Contact Us: admin [ a t ] ucptt.com