2016-09-10 22 views
2

特に1つのリストを考慮して、複数のリストのリストを作成したいと思います。例えばリスト内のリストに項目を挿入する

:私はxリストにabcから項目を追加し、一つのメインリストにxを追加します。

mainlist = [] 
x = [1, 2, 3] # items will be added hear. 

a = ['a1', 'b1', 'c1'] 
b = ['a2', 'b2', 'c2'] 
c = ['a3', 'b3', 'c3'] 

まず私はxのためにリストのリストを作成する必要があります。

x = [[i] for i in x] 

それが返されます。

out[1]: [[1], [2], [3]] 

を今、私はこれらのリストに項目を追加する:

for item in range(0, len(x)): 
    x[item].insert(1, a[item]) 

out[2]: [[1, 'a1'], [2, 'b1'], [3, 'c1']] 

次にアプリmainlistに終わり:

mainlist.append(x) 
out[3]: [[[1, 'a1'], [2, 'b1'], [3, 'c1']]] 

私の質問は、私はaリストと同じように、私はこの出力を得るために、bcから項目を追加する方法である:私はこれを試してみました

[[[1, 'a1'], [2, 'b1'], [3, 'c1']], [1, 'a2'], [2, 'b2'], [3, 'c2']], [1, 'a3'], [2, 'b3'], [3, 'c3']]] 

、およびI結果が得られましたが、このコードを改善できると思います。

item1 = [[i] for i in x] 
item2 = [[i] for i in x] 
item3 = [[i] for i in x] 

for i in range(0, len(item1)): 
    item1[i].insert(1, a[i]) 

for i in range(0, len(item2)): 
    item2[i].insert(1, b[i]) 

for i in range(0, len(item3)): 
    item3[i].insert(1, c[i]) 

mainlist.append(item1) 
mainlist.append(item2) 
mainlist.append(item3) 

改善のためのアドバイスが必要です。ありがとう!

答えて

3

だけジップXリストの各、Bと、 cをリストカンプ使用:

あなたを与えるだろう
x = [1, 2, 3] # items will be added hear. 

a = ['a1', 'b1', 'c1'] 
b = ['a2', 'b2', 'c2'] 
c = ['a3', 'b3', 'c3'] 

main_list = [zip(x, y) for y in a,b,c] 

[[(1, 'a1'), (2, 'b1'), (3, 'c1')], [(1, 'a2'), (2, 'b2'), (3, 'c2')], [(1, 'a3'), (2, 'b3'), (3, 'c3')]] 

をする場合あなたは実際にあなたが呼び出すことができるタプルの代わりにサブリストを望むマップタップをマップするレリストへ:

l = [] 
for y in a, b, c: 
    l.append([[x[i], ele] for i, ele in enumerate(y)]) 
print(l) 

、または同一のリストコンプバージョン:

あなたが ジップロジックを使用せず、通常のループを使用するつもりだった場合

[list(map(list, zip(x, y))) for y in a,b,c] 

、あなたのような何かをするだろうすべてxと同じ長さであると仮定

[[[x[i], ele] for i, ele in enumerate(y) ] for y in a, b, c] 

、各iはにおける現在の要素のインデックスでありますとそれに対応する要素であるxとそれをマッチさせます。これはまさにジップがやっているものです。

+0

ありがとう、@パドラック。素晴らしい解決策。説明ありがとう。 – estebanpdl

+1

zipとの違いは、最短リストの長さに切り詰められることです。列挙はIndecErrorを与えます。 –

関連する問題