私は整数のリストを持っていますx
、それから整数の2Dリストを作成したいと思いますy
ここで、すべての行i
のy
は、i
の値を持つx
の要素のインデックスのリストです。1Dリストのインデックスの2Dリストの作成
たとえば、:
x = [2, 0, 1, 1, 2, 4],
その後:
y = [[1], [2, 3], [0, 4], [], [5]]
どのように私はPythonできちんとこれを行うことができますか?
私は整数のリストを持っていますx
、それから整数の2Dリストを作成したいと思いますy
ここで、すべての行i
のy
は、i
の値を持つx
の要素のインデックスのリストです。1Dリストのインデックスの2Dリストの作成
たとえば、:
x = [2, 0, 1, 1, 2, 4],
その後:
y = [[1], [2, 3], [0, 4], [], [5]]
どのように私はPythonできちんとこれを行うことができますか?
またはリストの内包表記使用:
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)]
これは十分に簡単です、私の迅速な解決
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)
です:
y = [[] for _ in xrange(max(x)+1)]
for i, item in enumerate(x):
y[item].append(i)
我々が通過し、適切なサブリストに各インデックスを追加し、リストの右の数のリストを作ります。
義務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)]
を。これは、次の時間がかかる、と '範囲(LEN(x)は)'です外側のリストの理解のための間違った範囲。 – user2357112
私は 'len(x)'の代わりに 'max(x)+ 1'が必要だと思います – Karnivaurus
本当に、あなたは正しいです –