我有一个大于零的整数列表。我需要识别分频器数量最多的那个。为此,我创建了两个函数:一个给出了列表中所有元素的所有除数,另一个用于过滤哪个元素具有更多除数。问题是我不能让maisDivisores函数直接接收只有元素的列表(没有分隔符),你知道吗?如果我在函数2(maisDivisores)中调用函数1(listaDivisores)总是崩溃。但是,如果我手动调用它,它的效果很好。我已经尝试了所有的可能性而没有尝试。如何在第二个函数中调用第一个函数来获取总列表?
def listaDivisores(lista):
if lista == []:
return []
else:
lista=qs(lista)
resultado=[]
resultado.append((lista[0],[y for y in range(1,((lista[0])+1)) if (int(lista[0]))%y==0]))
return resultado+listaDivisores(lista[1:])
return listaDivisores(lista)
def maisDivisores(lista):
if len(lista)==[]:
return "Nenhum número."
else:
**lista=listaDivisores(lista)**
if int(len(lista))==1:
return lista[0]
elif int(len(lista[0][1]))<int(len(lista[1][1])):
lista.pop(0)
elif int(len(lista[0][1]))==int(len(lista[1][1])):
if lista[0]<lista[1]:
lista.pop(0)
else:
lista.pop(1)
else:
lista.pop(1)
return maisDivisores(lista)
return lista
functions working separately; error log when working together.
答案 0 :(得分:0)
您可以轻松地使用列表理解来获得数字的除数,例如
def divisores(n):
if n <= 0:
raise ValueError("n must be positive")
return [x for x in range(1,n+1) if n%x==0 ]
然后您可以使用max
中的内置key
功能来获得所需的结果
>>> test=[24, 5, 9, 42]
>>> max( test, key=lambda x:len(divisores(x)))
24
>>>
如果你也想在同一步中得到除数,你可以使用生成器或列表推导来构建一个中间结果,从中得到最大值
例如
>>> max( ( (x,divisores(x)) for x in test), key=lambda y:len(y[1]))
(24, [1, 2, 3, 4, 6, 8, 12, 24])
这里( (x,divisores(x)) for x in test)
是生成器,它创建一个元组及其除数的列表
或
>>> test2 = [ (x,divisores(x)) for x in test ]
>>> test2
[(24, [1, 2, 3, 4, 6, 8, 12, 24]), (5, [1, 5]), (9, [1, 3, 9]), (42, [1, 2, 3, 6, 7, 14, 21, 42])]
>>> max(test2,key=lambda x:len(x[1]))
(24, [1, 2, 3, 4, 6, 8, 12, 24])
>>>
任何一个都可以成为一个简单的功能。
你的实施对于你想要的东西来说太复杂了,坦率地说我很难理解它