Более краткое назначение для элементов в списке (Python)? - PullRequest
2 голосов
/ 07 октября 2011

Как я могу сделать следующее в более сжатой, "питонической" форме:

for element in some_list:
        if some_condition:
                element.some_attr = some_value

Ответы [ 3 ]

1 голос
/ 07 октября 2011

Единственное, что не является пифоническим в вашем коде, это то, что вы не используете 4 пробела для отступа .

«Pythonic» не всегда означает «сжатый»; например, следующее короче, но менее читабельно, чем ваш цикл:

[setattr(e, 'some_attr', some_value) for e in some_list if some_condition]

Итак, придерживайтесь кода, который у вас есть.

0 голосов
/ 07 октября 2011

Ваш код в порядке.

Может быть, вы можете предпочесть это:

for element in some_list:
    element.some_attr = some_value if some_condition else element.some_attr

Но это бесполезные задания ...

0 голосов
/ 07 октября 2011
any(setattr(element, "some_attr", some_value) for element in some_list if some_condition)

Не обязательно "более Pythonic" - но более кратким. Вызов функции do "any" предназначен только для того, чтобы генератор использовался, поскольку он создается как ленивый объект, а операции будут выполняться только при извлечении его элементов.

...