我有一个列表列表。每个子列表包含自定义类的对象。我想要做的是将每个类对象的某个属性设置为 0。执行此操作的简单方法是双 for 循环或类似的:
for subl in L:
for myObj in subL:
myObj.attr = 0
或者,我可以使用itertools.chain
:
for myObj in itertools.chain.from_iterable(L):
myObj.attr = 0
但是,我想知道是否可以将所有内容都设置在一行中。我可以使用类似生成器的结构来做到这一点吗?大致如下:
(myObj.attr=0 for subl in L for myObj in subl)
现在这不会真正起作用,并且会引发语法错误,但是有可能出现类似的情况吗?
最佳答案
这是对生成器表达式的滥用,但是:
any(setattr(obj, "attr", 0) for sub in L for obj in sub)
或者,可能会稍微快一些,因为没有对每个对象进行测试:
from collections import deque
do = deque(maxlen=0).extend
do(setattr(obj, "attr", 0) for sub in L for obj in sub)
关于python - 在生成器中设置类属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19698445/