我试图创建一个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