Как скопировать HashMap (не мелкое копирование) в Java

Если значения могут появляться в вашем списке повторно, вы можете попробовать это решение.

def search(Fscore_list, num=3):
    l = Fscore_list
    res = dict([(v, []) for v in sorted(set(l), reverse=True)[:num]])
    for index, val in enumerate(l):
        if val in res:
            res[val].append(index)
    return sorted(res.items(), key=lambda x: x[0], reverse=True)

Сначала он найдет самые высокие значения num=3 и создаст dict с пустым list для индексов для него. Затем он перейдет по списку и для каждого из самых высоких значений (val in res) сохранит его индексы. Затем просто верните отсортированный список кортежей, например [(highest_1, [indexes ...]), ..]. например,

>>> l = [9, 7, 43, 2, 4, 7, 43, 8, 5, 8, 4]
>>> print(search(l))
[(43, [2, 6]), (9, [0]), (8, [7, 9])]

Для печати позиций выполните следующее:

>>> Fscore_list = [9, 7, 43, 2, 4, 7, 43, 8, 5, 8, 4, 43, 43, 43]
>>> result = search(Fscore_list)
>>> print("1st. %d on positions %s" % (result[0][0], result[0][1]))
1st. 43 on positions [2, 6, 11, 12, 13]
>>> print("2nd. %d on positions %s" % (result[1][0], result[1][1]))
2nd. 9 on positions [0]
>>> print("3rd. %d on positions %s" % (result[2][0], result[2][1]))
3rd. 8 on positions [7, 9]
30
задан Mathis 2 February 2015 в 23:07
поделиться