2017-05-31 42 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))] 
相關問題