Как получить доступ к определенной части списка списков в Python для использования с модулем математики - PullRequest
0 голосов
/ 01 декабря 2019

Это задание для школы. У меня есть текстовый файл, который содержит следующий сокращенный список с каждой записью в одной строке. Первая запись - это дата, а вторая запись после пипса - это значение для закрытия фондового рынка, в файле приблизительно 365 записей.

8/28/2018|26064.01953
8/29/2018|26124.57031
8/30/2018|25986.91992

Используя следующий код, я разбил данные насписок списков с разделенными датой и значением.

import os
import math
import statistics
def main ():
    infile = open('DJI.txt', 'r')
    values = infile.read()
    infile.close()
    values=values.split("\n")
    values=[value.split("|") for value in values]
    print(values)
    avg = sum([float(l[1]) for l in values])/len(values)
main()  

Это дает следующий вывод

[['8/28/2018', '26064.01953'], ['8/29/2018', '26124.57031'], ['8/30/2018', '25986.91992'],

строка Avg выдает следующую ошибку: IndexError: индекс списка вне диапазона

Моя задача - создать программу, которая рассчитывает среднее значение закрытия за весь год. Среднее значение закрытия за месяц. Максимальное значение закрытия и дата, в которую это произошло. Наименьшее значение закрытия и дата, когда это произошло. Сортируйте цены по убыванию и запишите отсортированный список в новый текстовый файл DJI_Sorted.

У меня возникли проблемы с доступом к второму значению в списке списков для выполнения статистики по файлу. Я также не уверен, как написать код, который сортирует список по убыванию, а также среднему закрытию для каждого месяца, а не по всему файлу.

Ваша помощь очень ценится.

1 Ответ

1 голос
/ 01 декабря 2019

Вы можете получить доступ к каждому списку в вашем списке с помощью values[i] и каждому элементу такого списка с помощью values[i][j]. Таким образом, значение 10-й даты будет values[9][1]. Поскольку вы знаете количество элементов в каждом внутреннем списке и оно довольно мало, вы также можете распаковать свои списки.

Пример с тремя элементами во внутреннем списке: a,b,c = values[i].

Вы хотите выполнить итерацию по всему списку, так что цикл for - это то, что вам нужно, и вместо обработки индексов вы можете напрямуюраспакуйте внутренние списки в переменные со значимыми именами.

for date, value in values:
   value = float(value)
   if value > highest:
       highest = value
       highest_date = date

Другим вариантом было бы понимание списка:

avg = sum([float(l[1]) for l in values])/len(values)

Поскольку это ваша домашняя работа, я не хочу давать вам полное решение, но этого должно быть достаточно, чтобырешить все ваши вопросы, описанные выше. Последний совет: для ежемесячной статистики вам нужно дополнительно разделить дату, тогда есть несколько вариантов, которые можно использовать (сохранение значений каждого месяца в одном списке / словаре или вычисление на лету)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...