Python中的大多数除数

时间:2016-02-15 17:03:14

标签: python

我想编写一个名为find_integer_with_most_divisors的函数,它接受一个整数列表并返回具有最多除数的列表中的整数。如果是平局,则返回具有最多除数的第一个项目。

例如:

如果列表是:  [8,12,18,6]

在这个列表中,8有四个除数:[1,2,4,8]; 12有六个除数:[1,2,3,4,6,12]; 18有六个除数:[1,2,3,6,9,18]; 6有四个除数:[1,2,3,6]。请注意,12和18都是最大除数的数量(两个都有6个除数)。我的函数应该返回具有最大除数的第一项;所以它应该返回:  12

现在我为列表中的每个数字的查找分区编写了下面的代码。任何人都可以帮我继续这个功能。 感谢。

def find_integer_with_most_divisors(input_list):
    for i in input_list:
        my_list = []
        for x in range(1,i+1):
            if i % x == 0:
                my_list.append(i)

4 个答案:

答案 0 :(得分:1)

您可以创建函数中除数的数量列表,然后将该列表中的最大数字与原始列表匹配:

def find_integer_with_most_divisors(input_list):
    nr_divisors = []
    for i in input_list:
        my_list = []
        for x in range(1, i+1):
            if i % x == 0:
                my_list.append(x)
        nr_divisors.append(len(my_list))
    return input_list[nr_divisors.index(max(nr_divisors))]

a = [8, 12, 18, 6]

print find_integer_with_most_divisors(a)

返回

12

答案 1 :(得分:1)

为什么不将max与除数的数量一起用作关键?

>>> max([8, 12, 18, 6], key=lambda n: sum(n%d == 0 for d in range(1, n+1)))
12

答案 2 :(得分:0)

您需要做的就是跟踪目前为止最多的数字。我还将my_list的创建更改为更简单的一些内容:

def find_integer_with_most_divisors(input_list):
    winning_list = []
    winning_number = None
    for i in input_list:
        my_list = [x for x in range(1, i + 1) if i % x == 0]
        if len(my_list) > len(winning_list):
            winning_list = my_list
            winning_number = i
    return winning_number

答案 3 :(得分:0)

另一种使用sorted的解决方案:

def find_integer_with_most_divisors(input_list):

    def divisor_length(num):
        length = 0
        for i in range(1,num+1):
            if num % i == 0:
                length += 1
        return length
    return sorted(input_list, key=lambda x: divisor_length(x), reverse=True)[0]


print(find_integer_with_most_divisors([8,12,18,6])) 

12