18

我想知道是否有办法在某些东西上运行地图。map 的工作方式是它需要一个可迭代对象并将一个函数应用于该可迭代对象中的每个项目,从而生成一个列表。有没有办法让 map 修改可迭代对象本身?

4

4 回答 4

13

如果您需要就地修改列表,切片分配通常是可以的

mylist[:] = map(func, mylist)
于 2010-11-10T20:23:22.603 回答
4

写起来很简单:

def inmap(f, x):
    for i, v in enumerate(x):
            x[i] = f(v)

a = range(10)
inmap(lambda x: x**2, a)
print a
于 2010-06-08T19:22:39.370 回答
1

您可以使用 lambda(或 def)或更好的列表理解(如果足够的话):

[ do_things_on_iterable for item in iterable ]

无论如何,如果事情变得过于复杂,您可能希望使用 for 循环更加明确。

例如,您可以执行类似的操作,但恕我直言,这很丑:

[ mylist.__setitem__(i,thing) for i,thing in enumerate(mylist) ]
于 2010-06-08T19:14:48.933 回答
1

只需编写明显的代码即可。

for i, item in enumerate(sequence):
    sequence[i] = f(item)
于 2010-06-08T19:21:24.850 回答