Правильное использование списков - 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
Вам действительно следует избегать использования списков (наряду с пониманием слова, установкой понятий и выражений генератора) для побочных эффектов. Помимо того факта, что они накапливают фиктивный список и, таким образом, теряют память, это также запутывает. Я ожидаю, что понимание списка создаст (значимую) ценность, и многие согласятся. С другой стороны, петли, очевидно, представляют собой последовательность утверждений. Ожидается, что они начнут побочные эффекты и не получат никакого результата - не удивительно.
Ответ 2
Из документации python:
Сопоставление списков обеспечивает краткое создание списков. общий приложения должны создавать новые списки
Возможно, вы хотите узнать больше о reduce(), filter ( ) и map().
Ответ 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)