给定一个列表列表 lol
,我想在一行中完成
for ele in lol:
ele[1] = -2
我试过了
lol = map(lambda x: x[1] = -2, lol)
但是不可能在 lambda 函数中执行赋值。
最佳答案
我不会改变你自己的方法,但会回答你的问题:
lol = [[1,3],[3,4]]
from operator import setitem
map(lambda x: setitem(x, 1, -2), lol)
print(lol)
[[1, -2], [3, -2]]
它在适当的位置进行分配,但您基本上是在使用 map 来处理副作用并创建一个 None 的列表:
In [1]: lol = [[1, 3], [3, 4]]
In [2]: from operator import setitem
In [3]: map(lambda x: setitem(x, 1, -2), lol)
Out[3]: [None, None]
In [4]: lol
Out[4]: [[1, -2], [3, -2]]
所以真的坚持你自己的 for 循环逻辑。
它们简单的循环也更高效:
In [13]: %%timeit
lol = [[1,2,3,4,5,6,7,8] for _ in range(100000)]
map(lambda x: setitem(x, 1, -2), lol)
....:
10 loops, best of 3: 45.4 ms per loop
In [14]:
In [14]: %%timeit
lol = [[1,2,3,4,5,6,7,8] for _ in range(100000)]
for sub in lol:
sub[1] = -2
....:
10 loops, best of 3: 31.7 ms per
唯一的时间 map 。过滤器等。真正做得好的是如果你可以用内置函数或方法调用它们,即 map(str.strip, iterable)
,一旦你包含一个 lambda,性能通常会受到很大的打击。
关于python - 如何在 python 中对列表列表的所有元素执行 'one-liner' 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36282772/