python - 如何访问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 的新文本文件。
我在如何访问列表列表中的第二个值以对文件执行统计时遇到问题。我也不确定如何编写一个代码,将列表从最低到最高以及每个月的平均收盘价排序,而不是对整个文件进行排序。
非常感谢您的帮助。
解决方案
您可以使用 访问列表中的每个列表,使用 访问 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)
由于这是你的作业,我不想给你一个完整的解决方案,但这应该足以解决你上面描述的所有问题。最后一个提示:对于每月统计数据,您需要进一步拆分日期,然后有多个选项可供选择(将每个月的值保存在一个列表/字典中,或即时计算)
推荐阅读
- php - 如何从相似行的表中选择最旧的行?
- jestjs - 如何测试接受 JSX.Element 的函数?
- python - Jupyter Notebook (Python) 需要 tensorflow 1.4
- python - 如何在 for 循环中使用 insert() 而不使其成为无限循环?
- python - 制作执行另一个python代码的python代码的单个exe文件
- passport-saml - Saml 策略验证回调没有被调用
- php - 在 laravel 迁移中更改主 ID
- r - 如何使用 R 中的 groupby 语句计算唯一行
- python - 如何计算一个数字中的所有偶数?我究竟做错了什么?
- python - 如何使用 Python 将用户的输入日期存储到变量中?