создание списка списков для цикла - PullRequest
0 голосов
/ 10 марта 2020

Это мой код:

num= [2,10]

def calculo(lista):
    lista2 = []    
    for i in lista:
        for j in range(1, i + 1):
            if i % j == 0:
                lista2.append(j)
    return lista2

print(calculo(num))

, который выдает: [1, 2, 1, 2, 5, 10]. Однако мне нужен следующий результат:

[[1, 2], [1, 2, 5, 10]]

Кроме того, я хотел бы узнать ваш подход через понимание списка.

Ответы [ 5 ]

2 голосов
/ 10 марта 2020

Это будет означать, что i l oop добавляет новый список, а затем добавляет новые значения в последний список

num= [2,10]

def calculo(lista):
    lista2 = []    
    for i in lista:
        lista2.append([])
        for j in range(1, i + 1):
            if i % j == 0:
                lista2[-1].append(j)
    return lista2

print(calculo(num))

Также в краткой форме:

num= [2,10]

def calculo(lista):
    lista2 = [[j for j in range(1, i+1) if i % j == 0] for i in lista]
    return lista2

print(calculo(num))
1 голос
/ 10 марта 2020

, если вы хотите использовать понимание списка

[[x for x in range(1, n+1) if n%x==0] for n in num]
1 голос
/ 10 марта 2020

Вам нужно будет создать новый список для каждой итерации l oop:

outer_list = []
for i in lista:
    inner_list = []
    for j in range(...):
        if ...:
            inner_list.append(...)
    outer_list.append(inner_list)
return outer_list
0 голосов
/ 10 марта 2020

Вам необходимо создать вложенные списки перед вложенным l oop, так же, как вы создаете внешний список перед внешним l oop:

num = [2,10]

def calculo(lista):
    lista2 = []    
    for i in lista:
        lista3 = []
        for j in range(1, i + 1):
            if i % j == 0:
                lista3.append(j)
        if lista3:
            lista2.append(lista3)
    return lista2

print(calculo(num))

В любое время, когда у вас достаточно простой l oop, который добавляет элементы в список, вы можете превратить его в понимание списка. Например, внутренняя l oop становится:

lista3 = [j for j in range(1, i + 1) if i % j == 0]

Теперь вы можете написать всю функцию как:

def calculo(lista):
    return [[j for j in range(1, i + 1) if i % j == 0] for i in lista]
0 голосов
/ 10 марта 2020
num = [2,10]

def calculo(lista):
    result = [[j for j in range(1, i + 1) if i % j == 0] for i in lista]
    return result

print(calculo(num))

Выход:

[[1, 2], [1, 2, 5, 10]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...