我試圖創建一個Python列表,其中包含另一個整數列表(或Numpy數組)中元素的索引等於1的Python列表。我試圖是這樣的(對於1或2維的情況下):製作一個索引數組,其中包含某個值在另一個數組中的位置
#--- 1D case ---
A = [ 1, 0, 0, 1, 1 ]
idx = []
for i in range(len(A)):
if A[ i ] == 1 : idx.append(i)
print(idx) # [ 0, 3, 4 ]
#--- 2D case ---
B = [ [ 1, 0, 0, 1, 1 ], [ 0, 1, 1 ] ]
idx2 = [ [] for i in range(len(B)) ]
for i in range(len(B)):
for j in range(len(B[ i ])):
if B[ i ][ j ] == 1 : idx2[ i ].append(j)
print(idx2) #[ [0,3,4], [1,2] ]
這也可以更緊湊地寫爲
#--- 1D case ---
idx = [ i for i in range(len(A)) if A[ i ] == 1 ]
#--- 2D case ---
idx2 = []
for i in range(len(B)):
tmp = [ k for k in range(len(B[ i ])) if B[ i ][ k ] == 1 ]
idx2.append(tmp)
但我想知道如果有一個甚至更緊湊的方式(或內置函數),可用於相同的目的。在純Python,Numpy或其他地方有沒有這種方便的功能?
看看我的性反應的更新,並檢查一個更多的解決方案,當子列表的長度不等時 – Luchko
@Luchko感謝您的更新,我會在稍後再仔細研究。我創建的索引數組是用於某些聚類分析的,其大小先驗地未知,所以我使用了一個Python列表。但我也可以使用Numpy數組進行索引(或轉換列表 - >數組),所以沒有問題。謝謝:) – septc