2016-10-16 7 views
1

が、私は、フォームに2つのベクトルがを連結し、フラットなネストされた2つのPythonリスト

a = [[1,2,3],[1,2,3],[1,2,3]] 

b = [[5,6,7],[5,6,7],[5,6,7]] 

私はこのラインに

c = [[a[i],b[i]] for i in range(len(a))] 

を得たが、私の出力は

c = [[1,2,3,5,6,7],[1,2,3,5,6,7],[1,2,3,5,6,7]] 

になりたいてきました出力は

[[[1, 2, 3], [5, 6, 7]], [[1, 2, 3], [5, 6, 7]], [[1, 2, 3], [5, 6, 7]] 
+0

より良い出力の部分がどこから来た、それがより明確にするために6つの*異なる*サブリストを使用しています。 –

答えて

3

zipCONCATENATE各ペアリング:

a = [[1,2,3],[1,2,3],[1,2,3]] 

b = [[5,6,7],[5,6,7],[5,6,7]] 

print([i + j for i,j in zip(a, b)]) 

あなたを与えるだろう:

[[1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7]] 

したり、独自のロジックを使用して:+とを連結

[a[i] + b[i] for i in range(len(a))] 

ですキー。あなたがインデックスに行っていた場合、私はenumerateを使用します。

[ele + b[i] for i, ele in enumerate(a)] 
+1

これは良い方法ですが、私はいくつかの特徴ベクトルを持っており、scikit学習用の入力として配列を作成する必要があります –

-1

ここではitertoolsモジュールを使用したソリューションです:

from itertools import chain, starmap 
c = map(list, list(starmap(chain, zip(a, b)))) 

はパドレイクさんのコメントのおかげで編集します。これを使用することを私が推奨するには、この時点でネストされています。

+0

これはチェーンオブジェクトのリストを提供します。何かがあれば 'list(starmap(operator.add、zip(a、b))')、 'list(starmap(list .__ add__、zip(a、b)))'となります。 –

+0

私の悪い、編集された。 –

+0

私は実際には 'list(map、list、list(starmap(chain、zip(a、b)))))))')になるように、追加のリスト呼び出しが必要なので、オペレータのアプローチがより良いと思う。 –

2

ちょうど別の方法:

>>> map(list.__add__, a, b) 
[[1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7]] 

またはoperatorモジュールを使用して:

>>> map(operator.add, a, b) 
[[1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7]] 
+0

私はpadraicのソリューションを使っています。 [enumerate(a)のi、eleの場合は[ele + b [i] + c [i]] –

関連する問題