我想编写一个名为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)
答案 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