繁体   English   中英

用另一个列表中的元素替换列表中的元素

[英]Replacing elements in a list of lists, with elements from another list

我有两个清单:

abc = [[1, 11, 111, 111], [2, 22, 222, 2222], [3, 33, 333, 3333]]
bbb = [12, 13, 34]

我想将列表abc的每个子列表中的第二个元素替换为来自bbb的元素,因此我可以拥有一个看起来像这样的列表:

[[1, 12, 111, 111], [2, 13, 222, 2222], [3, 34, 333, 3333]]

我知道我必须使用列表理解,但是我无法弄清楚。

我能想到的最好的是:

newlist = [i[1]=bbb for i in abc]

您可以使用zip执行以下操作

abc = [[1, 11, 111, 111], [2, 22, 222, 2222], [3, 33, 333, 3333]]
bbb = [12, 13, 34]

result = [f[:1] + [s] + f[2:] for f, s in zip(abc, bbb)]

print(result)

产量

[[1, 12, 111, 111], [2, 13, 222, 2222], [3, 34, 333, 3333]]

您可以使用zip

abc = [[1, 11, 111, 111], [2, 22, 222, 2222], [3, 33, 333, 3333]]
bbb = [12, 13, 34]
result = [[a, b, *c] for [a, _, *c], b in zip(abc, bbb)]

输出:

[[1, 12, 111, 111], [2, 13, 222, 2222], [3, 34, 333, 3333]]

这个问题已经回答了,但是作为替代,您可以考虑使用numpy ,尤其是在数组很大的情况下:

import numpy as np
abc = [[1, 11, 111, 111], [2, 22, 222, 2222], [3, 33, 333, 3333]]
bbb = [12, 13, 34]

abc = np.array(abc)
abc[:,1] = bbb

>>> abc
array([[   1,   12,  111,  111],
       [   2,   13,  222, 2222],
       [   3,   34,  333, 3333]])

# You can convert back to list too if so desired:
>>> abc.tolist()
[[1, 12, 111, 111], [2, 13, 222, 2222], [3, 34, 333, 3333]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM