简单的python列表理解

时间:2013-02-15 16:37:36

标签: python list list-comprehension

我觉得这个问题有一个简单的答案,但我无法编写许多行代码而无法得到答案。我希望有人可以给我一些能让我的生活变得更轻松的事情。

我拥有的是:

highest_peak = sorted([(self.Y[x]-self.background_model[x]) for x in peaks_index_list])[0]

如何从peak_index_list中获取highest_peak的索引(x)?

index_of_highest_peak = sorted(???)[0]
index_of_second_highest_peak = sorted(???)[1]

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

如果你使用numpy,你可以

import numpy as np
highest_peak = np.asarray(highest_peak)

max_index = highest_peak.argmax()

答案 1 :(得分:3)

我认为峰值索引self.Y[i] - self.background_model[i]的峰值高度为i?如果你想要的只是最高峰的索引:

max(peaks_index_list, key=lambda i: self.Y[i] - self.background_model[i])

同样,如果您真的想要排序列表,请使用上面的键to sort peaks_index_list

答案 2 :(得分:2)

您应该对表单(值,索引)的元组列表进行排序 -

info = sorted((self.Y[x]-self.background_model[x],x) for x in peaks_index_list)

现在您的最高峰指数是:

info[-1][1]

或者你可以更好地解开它:

highest_peak_value,highest_peak_index = info[-1]

(最高峰在排序列表中排在最后,因为我们没有指定reverse=True

第二高峰指数是:

info[-2][1]

等等。

答案 3 :(得分:2)

(注意:根据评论进行编辑)

将索引添加到要排序的对象:

highest_peak, index = sorted([(self.Y[x]-self.background_model[x], x)
    for x in peaks_index_list])[0]

(最初我建议使用enumerate(),当你想要枚举的元素的索引时这很好。在这种情况下,peaks_index_list已经是海报所追求的索引。)

highest_peak, index = sorted([(self.Y[x]-self.background_model[x], i)
    for i, x in enumerate(peaks_index_list]))[0]