【发布时间】:2017-09-19 16:46:54
【问题描述】:
我正在尝试创建一个 Python 列表,其中包含另一个整数列表(或 Numpy 数组)中等于 1 的元素的索引。我正在尝试的是这样的(对于一维或二维情况):
#--- 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 感谢您的更新,我稍后也会仔细研究它。我正在制作的索引数组用于一些聚类分析,其大小是先验未知的,所以我使用了 Python 列表。但我也可以使用 Numpy 数组进行索引(或转换列表-> 数组),所以没问题。谢谢:)