楼主:
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, 谢谢。
作者:
Yshuan (倚絃)
2020-05-23 18:04:00推 取set很棒
楼主:
pmove (金疾柠檬)
2020-05-23 18:10:00C大好方法,也就是 5 == len(set(x,y,z,I,j))但是如果 x,y,z,I,j 是class, 那就无法用set, 这时有无好方法?
感觉用all也可以class有override equal跟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, 感谢以上各位大大的回答
如果是复杂情况就override equal再用for loop判断吧
作者:
zerof (猫橘毛发呆雕像)
2020-05-23 20:30:00operator.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的样子,没法多个
我感觉原来的最简洁好懂。不知道为何要缘木求鱼。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 才对
这种问题 stackoverflow 上面应该很多ㄅ
楼主:
pmove (金疾柠檬)
2020-05-24 20:42:00回z大, combinations我知,不过很多变量的情况,个人觉得c大的set法,速度会比较快
作者:
s860134 (s860134)
2020-05-30 18:02:00直觉 hash table 查数量确实会快一点