Правильное использование списков - python

Как правило, для получения нового списка из существующего списка используются списки. Например:

>>> a = [1, 2, 3, 4, 5]
>>> [i for i in a if i > 2]
[3, 4, 5]

Должны ли мы использовать их для выполнения других процедур? Например:

>>> a = [1, 2, 3, 4, 5]
>>> b = []
>>> [b.append(i) for i in a]
[None, None, None, None, None]
>>> print b
[1, 2, 3, 4, 5]

или мне следует избегать вышеизложенного и вместо этого использовать следующее:

for i in a:
    b.append(i)

Ответ 1

Вам действительно следует избегать использования списков (наряду с пониманием слова, установкой понятий и выражений генератора) для побочных эффектов. Помимо того факта, что они накапливают фиктивный список и, таким образом, теряют память, это также запутывает. Я ожидаю, что понимание списка создаст (значимую) ценность, и многие согласятся. С другой стороны, петли, очевидно, представляют собой последовательность утверждений. Ожидается, что они начнут побочные эффекты и не получат никакого результата - не удивительно.

Ответ 3

В примере, который вы ему даете, это имеет смысл:

b = [i for i in a]

если по какой-то причине вы хотели создать b. В общем, есть некоторый здравый смысл, который необходимо использовать. Если использование понимания делает ваш код нечитаемым, не используйте его. Иначе пойти на это.

Ответ 4

Используйте только списки, если вы планируете использовать созданный список. В противном случае вы создадите его только для того, чтобы GC снова выбросил его, но никогда не использовался.

Итак, вместо [b.append(i) for i in a] вы должны использовать правильный цикл:

for i in a:
    b.append(i)

Другим решением могло бы быть выражение генератора:

b += (i for i in a)

Однако, если вы хотите добавить весь список, вы можете просто сделать

b += a

И если вам просто нужно применить функцию к элементам, прежде чем добавлять их в список, вы всегда можете использовать map:

b += map(somefunc, a)

Ответ 5

b = []
a = [1, 2, 3, 4, 5]
b.extend (a)