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

cam*_*mil 12 python list map python-2.7

我想将一个函数应用于列表中的所有元素,但我想实际更改元素(对象),而不是查看结果.我认为这是使用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"
Run Code Online (Sandbox Code Playgroud)

这样做的方法是什么?

fre*_*ish 15

有什么问题

for i in my_things:
    i.size = "big"
Run Code Online (Sandbox Code Playgroud)

您不希望既不使用map也不使用列表comprehansion,因为它们实际上创建了新列表.而且你不需要那么开销,是吗?


Dir*_*rkR 11

虽然我同意没有任何问题

for i in my_things:
    i.size = "big"
Run Code Online (Sandbox Code Playgroud)

有些人热衷于python one-liners.;)

一个选项是为您的类添加一个set方法,然后可以从lambda中调用它(基本上将赋值隐藏在函数中):

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

map(lambda i: i.setSize("big"), my_things) 
Run Code Online (Sandbox Code Playgroud)

  • 这仍然会创建一个新列表! (2认同)