统计 x % y == 0 的出现次数

3
我正在编写一个函数,它接受*args参数,并返回一个字典,其中键从1到9,值为能够被1到9整除而没有余数的数字数量:
my_dict = {}
def myFunc(*args):
    for item in args:
        if (item % 2 == 0):
            my_dict[2] = number of times arguments were divisible by 2
                 if (item % 3 == 0):
                     my_dict[3] = number of times arguments were divisible by 3
       ...

myFunc(1,5,6,10,5,8)

我尝试过这个:

my_dict = {}
def myFunc(*args):
    x=0
    for item in args:
        if (item % 2) == 0:
           x+=1
           my_dict[2] = x
myFunc(1, 2, 3, 6, 8,10)
print(my_dict)
#{2: 4}

这个方案适用于一个数字,但我不确定如何优雅地填充整个字典,以便在传入1,2,3,4,4,5,10,16,20时看起来像这样:

my_dict = {1:9, 2:6, 3:1, 4:4, 5:3, 6:0, 7:0, 8:1, 9:0}

如何解决这个问题?

3个回答

5
a = [1,2,3,4,4,5,10,16,20]

d = {i: sum(k % i == 0 for k in a) for i in range(1,10)}

d
# {1: 9, 2: 6, 3: 1, 4: 4, 5: 3, 6: 0, 7: 0, 8: 1, 9: 0}

或者,如果您更喜欢的话,

def myfun(*args):
    return {i: sum(k % i == 0 for k in args) for i in range(1,10)}

myfun(1,2,3,4,4,5,10,16,20)
# {1: 9, 2: 6, 3: 1, 4: 4, 5: 3, 6: 0, 7: 0, 8: 1, 9: 0}

如果参数不是一个列表,那会发生什么?或者这不会改变任何东西吗? - Jonas Palačionis
1
我编辑了我的评论,使其更接近您的用法,希望这有所帮助。 - stevemo

1
尝试这个:-
def my_func(ls):
    res = {i:0 for i in range(1,10)}
    for l in ls:
        for i in range(1, 10):
            if l % i == 0:
                res[i] += 1

return res

print(my_func([1,2,3,4,4,5,10,16,20]))

输出将会像这样 -
{1:9, 2:6, 3:1, 4:4, 5:3, 6:0, 7:0, 8:1, 9:0}

0
你也可以使用 map 来解决这个问题。
my_dict = {}
def myFunc(*args):
   for y in range(1,10):
        my_dict[y] = sum(map(lambda number : number % y ==0, args))

myFunc(1, 2, 3, 6, 8,10)
print(my_dict)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接