比较Python中非关键字参数的变量数

2024-04-27 01:07:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,可以比较任意数量的给定输入值,看看它们是否都有相同的值

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

Tags: theto函数列表参数lendefargs
1条回答
网友
1楼 · 发布于 2024-04-27 01:07:55

如果你传入的所有项都是散列的(因此可以放入一个集合中),你可以用一个集合来做,就像你想的那样,像这样。。。在

def compare(self, message, *args):
    if len(set(args)) > 1:
        # not all args are the same
    else:
        # args are all the same

但是,有些东西(比如列表或字典)是不可哈希的,但仍然可以比较。在这种情况下,您需要进行实际比较:

^{pr2}$

请注意,为了简洁起见,我在比较中使用了args[0];您可以通过将args[0]的值存储在一个变量中来节省一些查找,但是您还需要检查以确保args的长度不是零。在

还要注意,后一种方法实际上比set方法更有效。为什么?因为它可以短路-如果args中有1000个元素,但是前两个元素不相等,那么第一个方法仍然会读取所有1000个值,而第二个方法在读取第一对元素后将立即退出。在

相关问题 更多 >