2016-04-08 8 views
3

私は整数のリストを持っていますx、それから整数の2Dリストを作成したいと思いますyここで、すべての行iyは、iの値を持つxの要素のインデックスのリストです。1Dリストのインデックスの2Dリストの作成

たとえば、:

x = [2, 0, 1, 1, 2, 4], 

その後:

y = [[1], [2, 3], [0, 4], [], [5]] 

どのように私はPythonできちんとこれを行うことができますか?

答えて

2

またはリストの内包表記使用:

x = [2, 0, 1, 1, 2, 4] 
y = [[j for j in range(len(x)) if x[j]==i] for i in range(max(x)+1)] 
+1

を。これは、次の時間がかかる、と '範囲(LEN(x)は)'です外側のリストの理解のための間違った範囲。 – user2357112

+1

私は 'len(x)'の代わりに 'max(x)+ 1'が必要だと思います – Karnivaurus

+0

本当に、あなたは正しいです –

1

これは十分に簡単です、私の迅速な解決

x = [2, 0, 1, 1, 2, 4] 

y = [] 
for i, k in enumerate(x): 
    if len(y) - 1 < k: #if our list isn't long enough for this value 
     while (len(y) - 1 != k): 
      y.append([]) #make it long enough 
    y[k].append(i) #append our current index to this values list 

print (y) 
2

です:

y = [[] for _ in xrange(max(x)+1)] 
for i, item in enumerate(x): 
    y[item].append(i) 

我々が通過し、適切なサブリストに各インデックスを追加し、リストの右の数のリストを作ります。

1

義務numpyの応答(argwhereのための完璧なケース):

import numpy as np 
x = np.array([2, 0, 1, 1, 2, 4]) 
print [np.argwhere(x == i).flatten().tolist() for i in range(np.max(x)+1)] 
関連する問題