一行用于对象修改的循环

时间:2015-06-21 10:03:24

标签: python python-2.7

我有一个对象数组,其中每个对象都有search_order属性。 我要遍历数组并将所有对象的属性增加1 这是一种简单的方法:

res = []
for r in array:
    r.search_order+=1
    res.append(r)
return iter(res) 

是否有一行for循环可以实现此目的?

return (r.search_order+=1 for r in array)

Doest似乎不幸地工作了。

2 个答案:

答案 0 :(得分:1)

这可能不是一行,但这可以正确地完成工作

def incr_search_order(x):
    x.search_order += 1
    return x

retrun map(incr_search_order, array)
<or>
return [incr_search_order(x) for x in array]

答案 1 :(得分:0)

您不能在生成器表达式或列表推导中使用赋值(它会引发SyntaxError)。

而是将属性添加为1并重新分配结果:

old_array=(r.search_order+1 for r in array)