如何将函数应用于列表元素?

2024-06-07 16:35:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对列表中的所有元素应用一个函数,但我想实际更改元素(它们是对象),而不是查看结果。我认为这是使用map()或列表理解的问题。

class Thing(object):
    pass

# some collection of things
my_things

# they are all big...

# produces SyntaxError: invalid syntax
[i.size = "big" for i in my_things]

# produces SyntaxError: lambda cannot contain assignment
map(lambda i: i.size="big", [i for i in my_things]) 

# no error, but is it the preferred way?
for i in my_things:
    i.size="big"

怎么做?


Tags: 对象lambda函数in元素map列表for
3条回答

可以使用__setattr__方法在列表理解中分配属性。尽管,根据一些SO线程,使用列表理解而不使用输出并不是pythonic。

[i.__setattr__('size', 'big') for i in my_things]

怎么了

for i in my_things:
    i.size = "big"

您不想使用map或列表压缩,因为它们实际上创建了新的列表。你不需要那么多开销,是吗?

但我也同意

for i in my_things:
    i.size = "big"

有些人热衷于python一行程序。;)

一个选项是向类中添加set方法,然后可以从lambda调用该方法(实际上是在函数中隐藏赋值):

class Thing(object):
    def setSize(self, size):
        self.size = size

map(lambda i: i.setSize("big"), my_things) 

相关问题 更多 >

    热门问题