首页 > 解决方案 > 如何访问python中列表列表的特定部分以与数学模块一起使用

问题描述

这是学校的作业。我有一个文本文件,其中包含以下缩写列表,每个条目都在一行上。第一个条目是日期,点后的第二个条目是股市收盘价,文件中大约有 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: list index out of range

我的任务是创建一个计算全年平均收盘价的程序。每月平均收盘价 最高收盘价和发生日期。最低收盘价和发生日期。将价格从最低到最高排序,并将排序后的列表写入一个名为 DJI_Sorted 的新文本文件。

我在如何访问列表列表中的第二个值以对文件执行统计时遇到问题。我也不确定如何编写一个代码,将列表从最低到最高以及每个月的平均收盘价排序,而不是对整个文件进行排序。

非常感谢您的帮助。

标签: pythonpython-3.x

解决方案


您可以使用 访问列表中的每个列表,使用 访问 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)

由于这是你的作业,我不想给你一个完整的解决方案,但这应该足以解决你上面描述的所有问题。最后一个提示:对于每月统计数据,您需要进一步拆分日期,然后有多个选项可供选择(将每个月的值保存在一个列表/字典中,或即时计算)


推荐阅读