Python中的大多数除数

Python中的大多数除数,python,Python,我想编写一个名为find_integer_的函数,其中包含_most_除数,它接受一个整数列表,并从除数最多的列表中返回整数。如果平局,返回除数最多的第一项 例如: 如果列表为: [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个除数)。我的函数应该返回具有最大除数的第一项;因此

我想编写一个名为find_integer_的函数,其中包含_most_除数,它接受一个整数列表,并从除数最多的列表中返回整数。如果平局,返回除数最多的第一项

例如:

如果列表为: [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个除数)。我的函数应该返回具有最大除数的第一项;因此,它应该返回: 十二,


现在我为查找列表中每个数字的除法编写了下面的代码。任何人都能帮我继续这项工作吗。 谢谢


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

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

你所需要做的就是跟踪到目前为止最多的数字。我还将您创建的
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

为什么不使用除数作为键的
max

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

另一种使用排序的
解决方案:

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

所以你可以计算每个数字的除数列表,但不知道如何确定哪个列表最长?
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