2011-12-26 10 views
1

以下は外部ファイル(これは実際には大きなリストです、len(M)>10000)。M1 = [a、b]とM2 = [x、y]にフォーマットM = [(a、x)、(b、y)]のリストを分離

M = [(1、100)、(2、200)、(3、300)、(4、400)]

ただし、IはM1=[1,2,3,4]M2=[100,200,300,400]に分離します。ここ はそれを行うには、より簡単で効率的な方法、Pythonで組み込み関数を使用するソリューションがある場合、私は思っていた

M1 = [] 
M2 = [] 
for M1,M2 in M: 
    M1.append(M1) 
    M2.append(M2) 

、私は現時点ではそれを行う方法です。

答えて

6

はちょうどそれを実行します。

M1, M2 = zip(*M) 

M1とM2は、タプルになります。あなたがしたい場合は、リストにそれらを変換することができます:

M1, M2 = map(list, zip(*M)) 

またはgenexpとを:

M1, M2 = (list(i) for i in zip(*M)) 
+0

うわー、ありがとう。それは私が必要なものです。 – mikeP

1

あなたはタプルだけでなく、リストの作品

M1, M2 = zip(*M) 

を行うことができます。

実際に長い外部ファイルがある場合、この方法では10kの引数をzipに送信し、すべてのコンテンツをメモリに保持するため、初期バージョンの方が高速になる可能性があります。あなたよりも効率的

2

一つの解決策、それは暗黙のループを使用するためには、次のとおりです。

>>> [m1 for m1, _ in M] 
>>> [1, 2, 3, 4] 
>>> [m2 for _, m2 in M] 
>>> [100, 200, 300, 400] 

しかし*オペレータとzipを使用しているより良い:

>>> M1, M2 = zip(*M) 
>>> M1 
(1, 2, 3, 4) 
>>> M2 
(100, 200, 300, 400) 
関連する問題