2017-07-11 10 views
1

は、:等しい長さの2つのリストを、順序付きペアを表すネストされたリストのリストに変換するにはどうすればよいですか?これらは私の二つのリストされている場合たとえば、

a=[1,2,3,4,5] 
b=[6,7,8,9,10] 

次に私がやろうとしていることを取得する方法を把握することです。おそらく基本的な質問のための

c=[[1,6],[2,7],[3,8],[4,9],[5,10]] 

は申し訳ありません。違いがある場合は、これは数が少ない配列です。

+0

これは潜在的に以前に答えられました:[ここにリンクの説明を入力](https://stackoverflow.com/questions/2407398/how-to-merge-lists-into-a-list-of-tuples-in-python) – robl

+0

リストを[Pythonでタプルのリストにマージするには?](https://stackoverflow.com/questions/2407398/how-to-merge-lists-into-a-list-of-tuples-in) -python) – CollinD

+0

Pythonのnumpyで「zip()」と同等のものは何ですか?](https://stackoverflow.com/questions/12744778/what-is-the-equivalent-of-zip-in- python-numpy) –

答えて

1

私は多分zipを使用することにより、numpyのを使用しないでください:

>>> a=[1,2,3,4,5] 
>>> b=[6,7,8,9,10] 
>>> list(zip(a,b)) 
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)] 

それはしかしタプルのリストを返します。

0

これはあなたに必要なものを与えます。

a = [1,2,3,4,5] 
b = [6,7,8,9,10] 
c = [list(x) for x in zip(a, b)] 
+0

これは、リストのリストではなくタプルのリストを返すようですが、 'map'を使ってそれを修正することができます。最も良い方法がわからない場合でも、' list(map(list、zip a、b))) 'がうまくいきます。 –

+1

@ViníciusAguiarあなたが正しいと思うのは、最もシンプルでpythonicなアプローチは、 'c = [zip(a、b)のxのlist(x)]'のようなリストの理解だけです。 –

2

一つのアプローチは、リスト内包とzipを使用している:

>>> [[i, j] for i, j in zip(a,b)] 
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 
0
d = [] 
for i in range(0, 5): 
    d.append([a[i], b[i]) 

は素子対を持つ新しい2Dリストを作成する簡単な方法です。他に指摘されているようにzip()関数を使用することも実行可能です。あなたは結果としてnumpyの配列をしたい場合は

3

、あなたはarray.Tを使用して、それを構築することができます:

In [15]: a=np.array([1,2,3,4,5]) 

In [16]: b=np.array([6,7,8,9,10]) 

In [17]: np.array([a,b]).T 
Out[17]: 
array([[ 1, 6], 
     [ 2, 7], 
     [ 3, 8], 
     [ 4, 9], 
     [ 5, 10]]) 

参考:What is the equivalent of "zip()" in Python's numpy?

0

これを行うには複数の方法がありますが。

a = [1, 2, 3, 4, 5] 
b = [6, 7, 8, 9, 10] 

あなたはちょうどあなたがzip機能を使用することができ、それらを修正する要素にアクセスしないようにする必要がある場合:

zip(a, b) 
>[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)] 

あなたが実際にリストのリストが必要な場合は、リストの内包表記を使用することができます:

[[a[i], b[i]] for i in range(len(a))] 
>[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

そして、あなたはその結果としてnumpyの配列を必要とする場合、最終的に、トランスポーズ機能を使用します。

import numpy as np 
np.concatenate([[a], [b]]).T 
>array([[1, 6], 
     [2, 7], 
     [3, 8], 
     [4, 9], 
     [5, 10]]) 
0

私は確かに、これより簡単な方法があります。

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

これはタプルのリストを出力だけではなく、list(zip(a,b)を行うためのリストのリストを出力します。これは、リスト内包表記を組み合わせて、

はまた

zip(*iterables)しかしいただきました方が効率的[[i,j] for i,j in zip(a,b)]

のタプルアンパックがわからない回避ジップ各iterableの要素をまとめるイテレータを作成します。

https://docs.python.org/3/library/functions.html#zip

1

だけnp.transpose使用:

>>> np.transpose([a, b]) 
array([[ 1, 6], 
     [ 2, 7], 
     [ 3, 8], 
     [ 4, 9], 
     [ 5, 10]]) 

あなただけ後でtolist()を呼び出すリストとして結果をしたい場合:

>>> np.transpose([a, b]).tolist() 
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 
0

をなしライブラリと、あなたが使用できます。

a = [1,2,3,4,5] 
b = [6,7,8,9,10] 
c = [[a[i],b[i]] for i in range(len(a))] 
関連する問題