2016-10-08 7 views
1

特定の問題に関する理解の問題があります。私は既存のネストされたリストを持っています。そして、ネストされたリストの終わりに、別のリストの1つの値を照合して付加したいと思います。ネストされたリストに特定の値を追加

initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]] 
other_values = [1,2,3,4] 

for sublist in initial_values: 
    for i in other_values: 
     sublist.append(i) 


print initial_values 

これは[['First', 1, 1, 2, 3, 4], ['Second', 2, 1, 2, 3, 4], ['Third', 3, 1, 2, 3, 4], ['Fourth', 4, 1, 2, 3, 4]]

が、私はそれそれが理想的に返すようにしたい戻ります[['First', 1, 1], ['Second', 2, 2], ['Third', 3, 3], ['Fourth', 4, 4]]

答えて

1

のためのあなたのダブル-loopは各サブリストを順番に(外側のfor-loop)取り、other_valuesのすべての要素をそれに追加します(内側のforループ)。代わりに、other_valuesの各要素を対応するサブリスト(つまり、同じ位置/インデックスのサブリスト)に追加する必要があります。したがって、必要なものだけforループである:ここで

initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]] 
other_values = [1,2,3,4] 

for i in range(len(initial_values)): # get all the valid indices of `initial_values` 
    initial_values[i].append(other_values[i]) 

のは、それを行うには、いくつかのシンプルな方法があります。

for i,subl in enumerate(initial_values): 
    subl.append(other_values[i])) 

それとも

for subl, val in zip(initial_values, other_values): 
    subl.append(val) 
+0

enumerate' 'とソリューションは、最も効率的であるように思われます。このために 'zip'を気にする必要はなく、一時的なオブジェクトをたくさん作成します。 –

+0

@ Jean-FrançoisFabre:python3では、zipは一時オブジェクトを作成しません。元のオブジェクトへのポインタを持つイテレータを返します。 – inspectorG4dget

+0

それはわかりますが、内部のタプルはまだ作成されていなければなりません。 –

1

あなたが行きたいように思える:私が試したものの簡単な例が、私はこだわっているところ1回の繰り返しで両方のリストを使用します。

for sublist, i in zip(initial_values, other_values): 
    sublist.append(i) 
2

あなたは異なるリストから同じインデックスの要素を一致させるためにzipを使用することができます:あなたは、その使用したzipを達成することができました。そこから、あなたは離れて、単純なリスト連結している:

[a + [b] for a,b in zip(initial_values, other_values)] 
0

機能内蔵zip等第二のリストの最初の項目と最初のリストの最初の項目と一致します

initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]] 
other_values = [1,2,3,4] 

for initials, other in zip(initial_values, other_values): 
    initials.append(other) 
1

あなたがforループを使用したい場合お試しください

initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]] 
other_values = [1,2,3,4] 

for i in range(0,len(other_values)): 
    initial_values[i].append(other_values[i]) 

print initial_values 

出力:を使用して、それを達成するための代替の [['First', 1, 1], ['Second', 2, 2], ['Third', 3, 3], ['Fourth', 4, 4]]

0

ワン:

>>> map(lambda x: x[0] + [x[1]], zip(initial_values, other_values)) 
[['First', 1, 1], ['Second', 2, 2], ['Third', 3, 3], ['Fourth', 4, 4]] 
関連する問題