【发布时间】:2017-03-19 03:27:53
【问题描述】:
只是了解列表理解,因为在最近的一次采访中,技术人员问了我这个问题,作为一个自学者,我回答了 lambda,它不是列表理解。
假设我们有一个时间序列数据“Shiller”,http://us.spindices.com/indices/real-estate/sp-corelogic-case-shiller-us-national-home-price-nsa-index
我使用以下循环计算了 aic/bic:
shiller = [please use some random data or use the link above]
import matplotlib.pyplot as plt
import statsmodels.api as sm
import pandas as pd
def aicbic(shiller):
arimaijk = []
aicijk = []
bicijk = []
index = []
for i in range(1,3):
for j in range(1,2):
for k in range(0,5):
arimaijk.append(sm.tsa.ARIMA(shiller,(i,j,k)).fit())
index.append([i,j,k])
aicijk.append(arimaijk[k].aic)
bicijk.append(arimaijk[k].bic)
return aicijk, bicijk
aicbic(shiller)
Out[9]:
([-235.77314152121426,-233.9375761653174,-233.3841011331017,-241.65994870973782,-240.2975620564456,-235.77314152121426,-233.9375761653174,-233.3841011331017,-241.65994870973782,-240.2975620564456],
[-227.98778197081049,-223.55709676477906,-220.40850188242874,-226.08922960893028,-222.13172310550345,-227.98778197081049,-223.55709676477906,-220.40850188242874,-226.08922960893028,-222.13172310550345])
现在,我想要使用 List Comprehension 得到这个结果,所以我写了以下几行,它们返回错误:
def aicbic(data):
arimaijk = []
aicijk = []
bicijk = []
index = []
[(sm.tsa.ARIMA(data,(i,j,k)).fit(),index.append([i,j,k]),\
aicijk.append(arimaijk[k].aic),bicijk.append(arimaijk[k].bic)) \
for i in range(1,3) for j in range(1,2) for k in range(0,5)]
IndexError: 列表索引超出范围
【问题讨论】:
-
列表理解一次只能构建一个列表。
-
谢谢斯蒂芬,这个操作有什么替代方案吗?
-
您可以在此处使用列表推导。你只需要以不同的方式切割它。如果您构建了一个Minimal, Complete, and Verifiable 示例,我会为您完成它。投票结束这个问题的其他人可能也会如此。
-
添加了一些数据和库,如果您指的是最小、完整和可验证的示例。
-
为了在这里获得最佳帮助,我们希望能够直接从帖子剪切和粘贴到编辑器中,然后运行代码。具有可验证的结果。然后我们可以更改代码并确保结果仍然很好。如果我们知道什么,通常是工具,而不是您的问题域。因此,您刚刚粘贴了一些名为
shiller的数据,但您的代码并未引用它。也没有预期的结果。
标签: python loops for-loop list-comprehension