2024-04-19 21:10:43 发布
网友
在Python中,是否可以用列表理解或类似的方式更新对象列表? 例如,我想设置列表中所有对象的属性:
result = [ object.name = "blah" for object in objects]
或使用map函数
map
result = map(object.name = "blah", objects)
如果没有与属性设置循环,是否可以实现?
(注:以上示例均为故意错误,仅为表达观点而提供)
归根结底,赋值是一个“语句”,而不是“表达式”,因此它不能用于lambda表达式或列表理解。你需要一个常规函数来完成你正在尝试的事情。
有一个内置函数将执行此操作(返回None的列表):
None
[setattr(obj,'name','blah') for obj in objects]
但请不要用它。只要使用一个循环就行了。我怀疑你会注意到任何效率上的差异,而且循环更加清晰。
如果你真的需要一个1行程序(虽然我不知道为什么):
for obj in objects: obj.name = "blah"
我发现大多数人想使用列表理解,因为有人告诉他们,他们是“快”。这是正确的,但只适用于创建新列表。对副作用使用列表理解不太可能带来任何性能上的好处,而且您的代码在可读性方面也会受到影响。实际上,使用列表理解而不是使用.append的等价循环的最重要原因是它更容易阅读。
.append
归根结底,赋值是一个“语句”,而不是“表达式”,因此它不能用于lambda表达式或列表理解。你需要一个常规函数来完成你正在尝试的事情。
有一个内置函数将执行此操作(返回
None
的列表):但请不要用它。只要使用一个循环就行了。我怀疑你会注意到任何效率上的差异,而且循环更加清晰。
如果你真的需要一个1行程序(虽然我不知道为什么):
我发现大多数人想使用列表理解,因为有人告诉他们,他们是“快”。这是正确的,但只适用于创建新列表。对副作用使用列表理解不太可能带来任何性能上的好处,而且您的代码在可读性方面也会受到影响。实际上,使用列表理解而不是使用
.append
的等价循环的最重要原因是它更容易阅读。相关问题 更多 >
编程相关推荐