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个除数)。我的函数应该返回具有最大除数的第一项;因此,它应该返回: 十二,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个除数)。我的函数应该返回具有最大除数的第一项;因此
现在我为查找列表中每个数字的除法编写了下面的代码。任何人都能帮我继续这项工作吗。 谢谢
您可以在函数中创建除数的列表,然后将该列表中的最大数与原始列表相匹配:
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