Понимание списка в Python: делать дополнительные для цикла, если условие проверено, иначе не делать дополнительные для цикла

Я хотел бы написать следующее:

result = []

for x in list(range(10)):
    if x%2 != 0:
        for a in [1,2]:
            result.append(a*x)
    else:
        result.append(x)

с пониманием списка.

Лучшее, что я получил до сих пор, было это:

[[a*x for a in [1,2]] if x%2!=0 else x for x in list(range(10))]

Но это возвращает:

[0, [1, 2], 2, [3, 6], 4, [5, 10], 6, [7, 14], 8, [9, 18]]

Я хотел бы получить это:

[0, 1, 2, 2, 3, 6, 4, 5, 10, 6, 7, 14, 8, 9, 18]

Есть идеи? Можно ли сделать это в одном утверждении, не создавая два списка и не складывая их вместе?

Дайте мне знать, если мне нужно предоставить больше информации.

4 голоса | спросил Edo 9 J0000006Europe/Moscow 2018, 16:40:45

1 ответ


0
Вы хотите сгладить вложенный список, это вызывает ---- +: = 0 =: + ---- :в одну строку:результат:получить список или отдельный элемент в виде списка (необходим для объединения элементов).Также не делайте ---- +: = 3 =: + ---- , ---- +: = 4 =: + ---- достаточно.в этом случае вы также можете избежать внутреннего listcomp, предварительно рассчитав цикл:и только с пониманием плоского списка, повторяющимся на понимании генератора:В заключение, в этом конкретном примере, что не так с хорошим старым циклом, слегка изменяющим ваш:---- +: = 8 =: + ---- добавляется каждый раз, поэтому просто добавьте ---- +: = 9 =: + ---- когда ---- +: = 10 =: +---- странно.Большинство людей найдут его более читабельным, даже если это не «однострочный»
ответил Jean-François Fabre 9 J0000006Europe/Moscow 2018, 16:45:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132