2017-05-31 47 views
0

这是我有:如何通过另一个列表的值更改子列表的值

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

“你想要什么”不合法的Python。 –

+0

@ScottHunter为什么不呢? –

+0

@ Ev.Kounis:不平衡的括号;列表中的冒号。输入到解释器中。 –

回答

0
[[b1, a1[1]] for a1, b1 in zip(a, b)] 
+0

内部容器是根据OP的列表 –

0
for i in range(0, 3): 
    temp = a[i] 
    d.append([b[i], temp[1]]) 

试一下

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']] 

更Python又是以下几点:

a= [[x[0], x[1][1]] for i, x in enumerate(zip(b, a))] 
print(a) # [['b0', '0'], ['b1', '1'], ['b2', '2']] 
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') 
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))] 
相关问题