提供列表:
x = [0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0]
我想获取所有非0值的索引并将其存储在d['inds']
中
然后使用d['inds']
中的索引遍历x
的列表并获取值。
所以我会得到类似的东西:
d['inds'] = [1, 5, 6, 9]
d['vals'] = [0.87, 0.32, 0.46, 0.10]
我已经使用以下方法获取了索引:
d['inds'] = [i for i,m in enumerate(x) if m != 0]
但是我不确定如何获得d['vals']
答案 0 :(得分:3)
d['vals'] = [x[i] for i in d['inds']]
更好的是,一次执行两项操作:
vals = []
inds = []
for i,v in enumerate(x):
if v!=0:
vals.append(v)
inds.append(i)
d['vals']=vals
d['inds']=inds
或
import numpy as np
d['inds'],d['vals'] = np.array([(i,v) for i,v in enumerate(x) if v!=0]).T
答案 1 :(得分:3)
您可以使用numpy
,其索引功能专为此类任务而设计:
import numpy as np
x = np.array([0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0])
x[x!=0]
Out: array([ 0.87, 0.32, 0.46, 0.1 ])
,如果您仍然对索引感兴趣:
np.argwhere(x!=0)
Out:
array([[1],
[5],
[6],
[9]], dtype=int64)
答案 2 :(得分:3)
您可以使用字典理解:
m = {i:j for i,j in enumerate(x) if j!=0}
list(m.keys())
Out[183]: [1, 5, 6, 9]
list(m.values())
Out[184]: [0.87, 0.32, 0.46, 0.1]
如果要将其保存在字典d
中,则可以执行以下操作:
d = {}
d['vals']=list(m.values())
d['ind']=list(m.keys())
d
{'vals': [0.87, 0.32, 0.46, 0.1], 'ind': [1, 5, 6, 9]}
答案 3 :(得分:1)
使用熊猫:
info.plist
输出:Int64Index([1,5,6,9],dtype ='int64')
答案 4 :(得分:1)
容易得多:
df['vals']=list(filter(None,x))
df['idx']=df['vals'].apply(x.index)
使用filter(None,x)
过滤非0值,(None
基本上不需要语句(或者不需要False
)
然后使用大熊猫申请使索引基本上通过'vals'
列,然后在列表x
中获取值索引