python - 如何在 python 中对列表列表的所有元素执行 'one-liner' 赋值

标签 python list

给定一个列表列表 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/

相关文章:

c++ - 如何直接从Google Map批量下载大量高分辨率卫星图片?

排序后Python重新排序列表列表

javascript - 列表到 Jquery 数据表 c#

python - 计算集合列表中的多次出现

c# - 如果对象不为空,则将对象添加到列表的简写

python - 未识别的图像错误 : cannot identify image file

python - 为什么当列表更新时,由列表元素组成的元组会发生变化

python - 如何从 npy.gz 文件中恢复一个 numpy 数组

python - 使用 conda 环境在 VS code 中部署 Azure Functions

python - 检查字符串(或拆分字符串)是否包含列表中的任何单词