我有一个函数,可以比较任意数量的给定输入值,看看它们是否都有相同的值
def compare(self, message, *args):
pars = list(args) #since args is stored in a tuple
len = len(pars)
I am not sure how to proceed with the comparison - earlier I was using 2 variables "val1 and val2" which was assuming that I am comparing only 2 variables but i want to make it possible to compare more than 2 parameters.
我有个主意
^{pr2}$所以x,d就是x,0,x,2。会有和参数长度一样多的索引,然后我可以把x_d(所有的)放到一个列表中,然后说len(set(the_list))==1。。差不多吧。如果没有更好的办法。在
有什么建议吗?在
在====================== 我在这里想出了一个解决方案——不确定这对于字典来说是如何工作的(也许有人可以在下面的函数中建议我如何处理这个问题??)但是在这里我把*参数(一个元组)转换成一个列表。。在
>>> def compare(list):
... if len(params) > 1:
... if len(set(list)) == 1:
... print "MATCH"
... else:
... print "NOT MATCHING"
...
>>> params1 = [ 4, 4, 4]
>>> compare(params1)
MATCH
>>> params = [ 3, 4, 5]
>>> compare(params)
NOT MATCHING
如果你传入的所有项都是散列的(因此可以放入一个集合中),你可以用一个集合来做,就像你想的那样,像这样。。。在
但是,有些东西(比如列表或字典)是不可哈希的,但仍然可以比较。在这种情况下,您需要进行实际比较:
^{pr2}$请注意,为了简洁起见,我在比较中使用了
args[0]
;您可以通过将args[0]
的值存储在一个变量中来节省一些查找,但是您还需要检查以确保args
的长度不是零。在还要注意,后一种方法实际上比
set
方法更有效。为什么?因为它可以短路-如果args
中有1000个元素,但是前两个元素不相等,那么第一个方法仍然会读取所有1000个值,而第二个方法在读取第一对元素后将立即退出。在相关问题 更多 >
编程相关推荐