给出列表lol
列表,我想一行
for ele in lol:
ele[1] = -2
我试过
lol = map(lambda x: x[1] = -2, lol)
但它无法在lambda函数中执行赋值。
答案 0 :(得分:7)
您可以使用setitem()
中的operator
功能:
from operator import setitem
lol = [setitem(x, 1, -2) or x for x in lol]
您还可以取出lol
重新定义,然后执行此操作:
from operator import setitem
map(lambda x: setitem(x, 1, -2), lol)
或
from operator import setitem
[setitem(x, 1, -2) for x in lol]
我必须同意Padraic,但你的方法看起来很好。
答案 1 :(得分:7)
我不会改变你自己的方法,而是回答你的问题:
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]]
所以真的坚持自己的循环逻辑。
他们简单的循环也是更高效的:
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(str.strip, iterable)
)调用它们,那么确实做得很好。一旦包含lambda,性能通常会受到重创。
答案 2 :(得分:1)
你试过了吗?
>>> lol = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> lol =[[-2] + mas for x, *mas in lol]
>>> lol
[[-2, 2, 3], [-2, 5, 6], [-2, 8, 9]]
>>>
答案 3 :(得分:1)
这个答案不是最有效的方式,我只是发布它以获得有关它质量的反馈,如果它是Pythonic的方式,否则我将删除它,如果它#&## 39; s downvoted,所以:
>>> lol
[[1, 3], [3, 4]]
>>>
>>>
>>> list(map(lambda x:x.__setitem__(1, -2), lol)) #list required in Python 3
[None, None]
>>> lol
[[1, -2], [3, -2]]