![](/img/trans.png)
[英]Python - Replacing repeating elements in a list with unique elements from another lists
[英]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.