Допустим, у меня есть список данных ... скажем, цены на акции, например, и я хочу узнать больше о различиях между каждым элементом списка - особенно о самых больших различиях.В этом случае было бы найти 2 цены, которые демонстрируют наибольшее изменение (т.е. наибольшую прибыль или убыток).
Теперь я не просто хочу найти единственное число наибольшую разницу,Я хочу найти, возможно, 5 самых больших различий - где все 5 пар чисел, используемых для вычисления разности, уникальны и не сходятся в одном решении.
Один из способов сделать это - использовать вложенные циклы forвот так:
nums = [1,2,3,4,5]
for i in nums:
for x in nums:
return x-i
Но я чувствую, что этот метод действительно неуклюж и не решает вопрос под рукой.Есть лучший способ сделать это?Спасибо!
Редактировать:
Решение для заинтересованных
Я использовал модифицированную версию ответа @Chris_Rands, чтобы решитьпроблема.По сути, эта функция просто находит единственное наибольшее различие, а затем удаляет каждый элемент из исходного списка и выполняет этот процесс до тех пор, пока не останется только 1 элемент (если вы не можете найти другую разность).В результате получается массив кортежей, содержащий 100% уникальных пар с наибольшим отличием от набора данных:
from itertools import combinations
from heapq import nlargest
nums = [98,34,513,352,3523,308,13]
def findTrades(list_, amount):
Trades_ = []
while len(list_) >= 2:
res = nlargest(1, combinations(list_, 2), key = lambda x: abs(x[0]-x[1]))
Trades_.append(res)
for i in res[0]:
list_ = [x for x in list_ if x != i]
return sorted(Trades_)[-amount:]
print (findTrades(nums, 3))