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

时间:2018-11-01 00:53:33

标签: python python-3.x

我有两个列表:

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]

3 个答案:

答案 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]]