我有两个列表:
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]
答案 0 :(得分:2)
您可以使用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]]
答案 1 :(得分:1)
您可以使用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]]
答案 2 :(得分:0)
这个问题已经回答了,但是作为替代,您可以考虑使用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]]