Python - разделение списка для получения минимума и максимума - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть список с 2 элементами каждый, первый элемент - это временная метка, а второй - это стоимость, это список из 10, я хочу просто отсортировать по минимуму и максимуму и отобразить его временную метку, чтобы увидеть, чтовремя в течение дня произошла самая высокая или минимальная стоимость.

, поэтому что-то вроде этого будет максимумом ['280.88000000'], но я хочу знать, в какое время дня это произошло, поэтому мне нужна дата ['280.88000000', 2019-04-13 13:42:00], это не обязательно должно быть в списке, это может быть строка или что-то еще, просто не знаю, как это сделать ... вот код, который яя пытался.

import time
import datetime


timencost = [[1555232400000, '278.63000000'], [1555236000000, '278.80000000'], [1555239600000, '279.25000000'], [1555243200000, '278.16000000'], [1555246800000, '283.10000000'], [1555250400000, '279.85000000'], [1555254000000, '279.93000000'], [1555257600000, '280.88000000'], [1555261200000, '278.91000000'], [1555264800000, '280.75000000']]


minn = float(min([i[-1] for i in timencost]))

maxx = float(max([i[-1] for i in timencost]))

print(minn, maxx)

dates = [i[-2] for i in timencost]

print(dates) #???????

#this is where iam stuck...

print(minn, "date:", str(datetime.datetime.fromtimestamp(float(dates/1000)).strftime('%Y-%m-%d %H:%M:%S')))

как отобразить правильную дату рядом с моим минимумом?

Ответы [ 3 ]

2 голосов
/ 14 апреля 2019

Вы можете использовать max() и min() напрямую, передав аргумент key, который описывает, как вы хотите работать с рассматриваемыми элементами.Ключ должен быть простой функцией, например, которая преобразует правильный индекс в число с плавающей запятой

max(timencost, key=lambda x: float(x[1]))  # max based on float of index 1 of each element

# same with min
min(timencost, key=lambda x: float(x[1]))

Если сложить его вместе, вы получите что-то вроде:

import datetime

timencost = [[1555232400000, '278.63000000'], [1555236000000, '278.80000000'], [1555239600000, '279.25000000'], [1555243200000, '278.16000000'], [1555246800000, '283.10000000'], [1555250400000, '279.85000000'], [1555254000000, '279.93000000'], [1555257600000, '280.88000000'], [1555261200000, '278.91000000'], [1555264800000, '280.75000000']]

minn = min(timencost, key=lambda x: float(x[1]))
maxx = max(timencost, key=lambda x: float(x[1]))

print("min", "date:", datetime.datetime.fromtimestamp(minn[0]/1000).strftime('%Y-%m-%d %H:%M:%S'))
print("max", "date:", datetime.datetime.fromtimestamp(maxx[0]/1000).strftime('%Y-%m-%d %H:%M:%S'))
0 голосов
/ 14 апреля 2019

Попробуйте

import datetime

def by_price(e):
  return float(e[1])


timencost = [[1555232400000, '278.63000000'], [1555236000000, '278.80000000'], [1555239600000, '279.25000000'], [1555243200000, '278.16000000'], [1555246800000, '283.10000000'], [1555250400000, '279.85000000'], [1555254000000, '279.93000000'], [1555257600000, '280.88000000'], [1555261200000, '278.91000000'], [1555264800000, '280.75000000']]

sorted_timencost = sorted(timencost,key=by_price)

print('max: {} {} '.format(sorted_timencost[0][1],datetime.datetime.fromtimestamp(sorted_timencost[0][0]/1000)))

print('min: {} {} '.format(sorted_timencost[-1][1],datetime.datetime.fromtimestamp(sorted_timencost[-1][0]/1000)))

Вывод

max: 278.16000000 2019-04-14 12:00:00
min: 283.10000000 2019-04-14 13:00:00
0 голосов
/ 14 апреля 2019

Вам не нужно разбивать список

# First turn those strings to numbers
timencost = [(x, float(y)) for x,y in timencost]

# Sort them by cost
timencost.sort(key=lambda e: e[1])
# Get the max and min entries
min_entry = timencost[0]
max_entry = timencost[-1]

# the entries have both the cost and the time, format the dates how you want
...