1

我的目标是在一个列表中找到几个(在此示例中为 3)最大值fourire,识别列表中的位置,并在另一个列表中获得相应的(position_wise)值freq,因此打印输出应该是

2. 27.
9. 25.
4. 22.

附加的python工作正常......有点。

** 请注意,我正在处理 numpy 数组,因此 index() 不起作用....

有没有办法改进以下内容?

import heapq

freq    = [  2., 8., 1., 6., 9., 3.,  6., 9.,   4., 8., 12.]
fourire = [ 27., 3., 2., 7., 4., 9., 10., 25., 22., 5.,  3.]

out = heapq.nlargest(3, enumerate(fourire), key=lambda x:x[1])

elem_fourire = []
elem_freq = []
for i in range(len(out)):
    (key, value) = out[i]
    elem_freq.extend([freq[key]])
    elem_fourire.extend([value])

for i in range(len(out)):  
    print elem_freq[i], elem_fourire[i]
4

1 回答 1

1
import numpy as np

fourire = np.array(fourire)
freq = np.array(freq)

ix = fourire.argsort(kind='heapsort')[-3:][::-1]

for a, b in zip(freq[ix],fourire[ix]):
    print a, b

印刷

2.0 27.0
9.0 25.0
4.0 22.0

如果您想使用heapq而不是numpy,对上面的代码稍作修改会产生:

ix = heapq.nlargest(3,range(len(freq)),key=lambda x: fourire[x])
for x in ix:
    print freq[x], fourire[x]

结果相同的输出

于 2013-04-17T21:23:16.737 回答