列表中元素的更简洁的赋值(Python)?

时间:2011-10-07 12:38:57

标签: python list variable-assignment list-comprehension python-2.x

如何以更简洁,“pythonic”的方式执行以下操作:

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

3 个答案:

答案 0 :(得分:1)

您的代码中唯一没有pythonic的是您没有使用4 spaces for indentation

“Pythonic”并不总是意味着“简洁”;例如,以下内容比您的循环更短,但可读性更低:

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

所以,坚持你的代码。

答案 1 :(得分:0)

any(setattr(element, "some_attr", some_value) for element in some_list if some_condition)

不一定是“更多Pythonic” - 但更简洁。函数调用“any”只是为了使生成器被消耗 - 因为它被创建为一个惰性对象,并且只有在获取元素时才会执行操作。

答案 2 :(得分:0)

您的代码没问题。

可能你更喜欢这个:

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

但它确实没用了......