Сделайте один код лайнера для распаковки списка в Python - PullRequest
0 голосов
/ 16 марта 2020
max_depth = [[i]*36 for i in range(1,11)]
max_depth = [j for k in max_depth for j in k]

Я хочу преобразовать вышеуказанный код в одну строку.

Ответы [ 3 ]

3 голосов
/ 16 марта 2020

Вместо создания вложенного списка с [i]*36, добавьте еще for для извлечения i 36 раз:

[i for i in range(1,11) for _ in range(36)]

Что будет эквивалентно:

max_depth = []
for i in range(11):
    for _ in range(36):
        max_depth.append(i)
0 голосов
/ 16 марта 2020

Использование модуля itertools:

from itertools import chain

max_depth = list(chain.from_iterable([i]*36 for i in range(1,11)))

Переход на один шаг вперед с помощью itertools,

from itertools import chain, repeat

max_depth = list(chain.from_iterable(repeat(i, 36) for i in range(1,11)))
0 голосов
/ 16 марта 2020

Самое простое решение:

[j for k in [[i]*36 for i in range(1,11)] for j in k]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...