Считайте случаи, где x% y == 0 - PullRequest
3 голосов
/ 27 апреля 2020

Я пишу функцию, которая принимает *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)

I пробовал это:

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 голосов
/ 27 апреля 2020
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}
1 голос
/ 27 апреля 2020

Попробуйте это: -

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 голосов
/ 27 апреля 2020

Вы также можете использовать карту, чтобы решить эту проблему.

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)
...