roo*_*ook 13 python list-comprehension
在Python中,是否可以更新列表推导中的对象列表或类似的方式?例如,我想设置列表中所有对象的属性:
result = [ object.name = "blah" for object in objects]
Run Code Online (Sandbox Code Playgroud)
或有map功能
result = map(object.name = "blah", objects)
Run Code Online (Sandbox Code Playgroud)
如果没有使用属性设置进行循环,是否可以实现?
(注意:以上所有示例都是故意错误的,只是为了表达这个想法而提供)
mgi*_*son 28
最终,赋值是"语句",而不是"表达式",因此它不能用于lambda表达式或列表推导.你需要一个常规的功能来完成你正在尝试的东西.
有一个内置功能(返回列表None):
[setattr(obj,'name','blah') for obj in objects]
Run Code Online (Sandbox Code Playgroud)
但请不要使用它.只需使用一个循环. 我怀疑你会注意到效率的任何差异,循环是如此清晰.
如果你真的需要1-liner(虽然我不明白为什么):
for obj in objects: obj.name = "blah"
Run Code Online (Sandbox Code Playgroud)
我发现大多数人都想使用列表推导,因为有人告诉他们他们"很快".这是正确的,但仅用于创建新列表.使用列表理解副作用不太可能带来任何性能优势,并且您的代码在可读性方面会受到影响.实际上,使用列表推导而不是等效循环的最重要原因.append是因为它更容易阅读.