python - 在生成器中设置类属性值

标签 python python-3.3

我有一个列表列表。每个子列表包含自定义类的对象。我想要做的是将每个类对象的某个属性设置为 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/

相关文章:

python - matplotlib 轴上的不同精度

Python 3.3.2 不允许我使用 'raise SystemExit'

python - PyOpenGL Texture_3D 和 Numpy 不渲染

python - 从 Python3.3 中的字符串中删除除字母和空格之外的所有内容

python:双端队列与列表性能比较

python - 从嵌套字典中递归删除 None 值或 None 键

python - 返回满足特定条件的多维数组的子集?

python - 识别并计算用户定义段内的点

python if语句总是

python - 为 .exe 文件设置图标