查找最除数的整数

时间:2017-03-24 19:15:55

标签: python

我正在尝试创建一个函数,当提供列表时,该函数返回带有大多数除数的整数。

def number_of_divisors(k):
    count = 0
    for number in range(1, k+1):
        if k % number == 0:
            count += 1
    return count

def max_divisors(list_i):
    return(max(list_i, key = number_of_divisors))

此功能完美正常。但如果提供像[8,12,18,6]这样的列表,则12和18与最大除数相关联。它只返回具有最大除数的第一项,即12.我希望它也返回18。怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

您将必须收集所有结果,并且您可以使用字典将除数的数量映射到数字,然后返回该数字列表,例如:

def max_divisors(list_i):
    d = {}
    for n in list_i:
        d.setdefault(number_of_divisors(n), []).append(n)

    return d[max(d)]

>>> max_divisors([8,12,18,6])
[12, 18]

答案 1 :(得分:0)

您可以像这样重写max_divisors函数:

def max_divisors(items):
    div_list = list(map(number_of_divisors, items))
    most = max(div_list)
    return [items[i] for i, div in enumerate(div_list) if div == most]

第一行生成与您的项目对应的除数列表,因此div_list[i]等于items[i]处的数字的除数。第二行找到最大除数,第三行在除数列表中行进,并且只有在具有最大除数的情况下才将相应的数字添加到返回列表中。

第三行包含Python列表理解的示例;既然你是初学者,你可能以前从未见过其中的一个。它的一般形式是

[item for item in sequence if cond]

在下面更详细的代码中等同于filtered的表达式

filtered = []
for item in sequence:
    if cond:
        filtered.append(item)

请注意,列表推导中的itemcond字段都可以是任何Python表达式。