for循环中的清洁程序赋值(python)

atp*_*atp 1 python

我有一个nodelist对象node在迭代时产生一堆对象.我需要根据一些随机条件(如node.x > 17)增加这些节点.这就是我现在正在做的事情:

for node in nodelist: 
    if node.x > 17: 
        node.x += 1 
Run Code Online (Sandbox Code Playgroud)

我不能这样做map(lambda node: node.x += 1, nodelist)因为lambda不能包含赋值.我不能这样做,nodelist = [node.x + 1 for node in nodelist if...]因为一个nodelist对象不仅仅包含它的子节点.

有没有办法让这个更短/更干净?

sen*_*rle 7

我认为它已经非常简洁.Python提供了一些强大的工具,但有时简单是最好的; 这似乎是其中一个时代.

我也认为你拥有的东西比任何等效的单行程更具可读性(我可以提出).


好吧,那说,你可以这样做:

for node in (n for n in nodelist if condition):
    node.x += 1
Run Code Online (Sandbox Code Playgroud)

甚至可以压缩成一行.但老实说,我更喜欢你现在的方式.