Цикл Python со списками - PullRequest
0 голосов
/ 12 июня 2011

Я писал некоторый код на Python 3.2, и мне пришел вопрос:

У меня есть следующие переменные:

# a list of xml.dom nodes (this is just an example!)
child_nodes = [node1, node2, node3]
# I want to add every item in child_node into this node (this also a xml.dom Node)
parent = xml_document.createElement('TheParentNode')

Это именно то, что я хочу сделать:

for node in child_nodes:
    if node is not None:
        parent.appendChild(node)

Я написал это одной строкой так:

[parent.appendChild(c) for c in child_nodes if c is not None]

Я не собираюсь использовать результат списка вообще, мне нужен только appendChild для его работы.

Я не очень опытный программист на Python, поэтому мне интересно, какой из них лучше?Мне нравится одностроковое решение, но я хотел бы узнать от опытных программистов на Python:

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

Ответы [ 2 ]

8 голосов
/ 12 июня 2011

Первый предпочтительнее в этой ситуации.

Последний называется пониманием списка и создает новый list объект, полный результатов каждого вызова parent.appendChild(c). А затем отбрасывает его .

Однако, если вы хотите, чтобы сделал list на основе этого вида итерации, тогда вам непременно следует использовать понимание списка.

0 голосов
/ 12 июня 2011

Вопрос красоты кода / удобства обслуживания является сложным.Вам решать, с кем бы вы ни работали, решать.

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

...