这就是我所拥有的:
a = [['a0', '0'], ['a1', '1'], ['a2', '2']]
b = ['b0', 'b1', 'b2']
我想要的是将a
中每个子列表的所有第一个值替换为b
中的值。所以这将是理想的输出:
d = [['b0', '0'], ['b1', '1'], ['b2', '2']]
这是我的代码:
def make_new_list(a,b):
for sublist in a:
for i in range(len(b)):
sublist[0] = b[i]
return a
这是我用这段代码得到的:
[['b2', '0'], ['b2', '1'], ['b2', '2']]
我做错了什么,如何解决?
答案 0 :(得分:0)
[[b1, a1[1]] for a1, b1 in zip(a, b)]
答案 1 :(得分:0)
for i in range(0, 3):
temp = a[i]
d.append([b[i], temp[1]])
试试
答案 2 :(得分:0)
代码的问题在于构造循环的方式。特别是内部的,对a
中的每个子列表执行3次。你不希望出现这种情况。以下是您的脚本的固定版本:
a=[['a0','0'],['a1','1'],['a2','2']]
b=['b0','b1','b2']
def make_new_list(a,b):
for i, sublist in enumerate(a):
sublist[0] = b[i]
return a
print(make_new_list(a, b)) # [['b0', '0'], ['b1', '1'], ['b2', '2']]
更多Pythonic还会如下:
a= [[x[0], x[1][1]] for i, x in enumerate(zip(b, a))]
print(a) # [['b0', '0'], ['b1', '1'], ['b2', '2']]
答案 3 :(得分:0)
您可以使用zip
和列表理解,如下所示:
>>> a=[['a0','0'],['a1','1'],['a2','2']]
>>> b=['b0','b1','b2']
>>> [[bl]+al[1:] for al, bl in zip(a,b)]
[['b0', '0'], ['b1', '1'], ['b2', '2']]
或者,使用numpy
切片分配:
>>> import numpy as np
>>> ar=np.array([['a0','0'],['a1','1'],['a2','2']])
>>> ar[:,0]=b
>>> ar
array([['b0', '0'],
['b1', '1'],
['b2', '2']],
dtype='|S2')
答案 4 :(得分:0)
你可以不用拉链试试这个:
a = [['a0', '0'], ['a1', '1'], ['a2', '2']]
b = ['b0', 'b1', 'b2']
new_list = [[b[i], a[i][1]] for i in range(len(b))]