我的代码适用于单个列表,但不适用于嵌套列表。我需要在功能方面改进它
My code works for a single list but not for a nested list. I need to improve it in means of functionality
我有任务要做。我发现了如何以我自己的方式执行所需的内容,但解决方案只是部分的。它不适用于嵌套列表。这些是我的代码。
def calc_averages():
allprices =[ ['', '', '', '', 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, '', 1.8, 1.3, 1.1, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.2, 1.2, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.1, 1.2, 1.4, 1.8, 1.9, 2.2] ]
averages = []
aList = []
for lst in allprices:
aList.append(lst[5])
averages.append(sum(aList)/len(aList))
return averages
这适用于计算单个月的平均值,即每个列表中第 6 个值的总和除以 5。
但是,当我尝试使用上述代码计算所有 12 个月的平均值时,它不起作用,除非我将这些空字符串更改为 0。
ef calc_averages():
allprices =[ [0, 0, 0, 0, 1.0, 2.0, 1.2, 1.3, 1.1, 0, 0, 0],
[0, 0, 0, 1.2, 1.0, 2.0, 1.2, 1.3, 1.1, 0, 0, 0],
[0, 0, 0, 1.2, 0, 1.8, 1.3, 1.1, 0, 0, 0, 0],
[0, 0, 0, 0, 1.0, 2.0, 1.2, 1.2, 0, 0, 0, 0],
[0, 0, 0, 0, 1.0, 2.0, 1.1, 1.2, 1.4, 1.8, 1.9, 2.2] ]
averages = []
aList = []
bList = []
cList = []
dList = []
eList = []
fList = []
gList = []
hList = []
iList = []
jList = []
kList = []
lList = []
for lst in allprices:
aList.append(lst[0])
bList.append(lst[1])
cList.append(lst[2])
dList.append(lst[3])
eList.append(lst[4])
fList.append(lst[5])
gList.append(lst[6])
hList.append(lst[7])
iList.append(lst[8])
jList.append(lst[9])
kList.append(lst[10])
lList.append(lst[11])
averages.append(sum(aList)/len(aList))
averages.append(sum(bList)/len(bList))
averages.append(sum(cList)/len(cList))
averages.append(sum(dList)/len(dList))
averages.append(sum(eList)/len(eList))
averages.append(sum(fList)/len(fList))
averages.append(sum(gList)/len(gList))
averages.append(sum(hList)/len(hList))
averages.append(sum(iList)/len(iList))
averages.append(sum(jList)/len(jList))
averages.append(sum(kList)/len(kList))
averages.append(sum(lList)/len(lList))
return averages
当我尝试用那些空字符串 运行 它时,它给了我这个错误;类型错误:+ 不支持的操作数类型:'int' 和 'str'
我也知道它写得不好。如果您有任何改进建议,请告诉我。已经谢谢你:)
您的问题是您试图将一个字符串和一个整数相加。
我会做
而不是 sum(aList)/len(aList)
sum(list(filter(lambda x: x != '', aList)))/ len(aList)
从列表中删除所有空字符。
将我清理的所有内容打包在一起,你有多个列表:
def main():
allprices =[['', '', '', '', 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, '', 1.8, 1.3, 1.1, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.2, 1.2, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.1, 1.2, 1.4, 1.8, 1.9, 2.2]]
alllists = [[allprices[i][j] for i in range(len(allprices))] for j in range(12)]
averages = []
for alist in alllists:
averages.append(sum(list(filter(lambda x: x != '', alist)))/ len(alist))
print(averages)
main()
我有任务要做。我发现了如何以我自己的方式执行所需的内容,但解决方案只是部分的。它不适用于嵌套列表。这些是我的代码。
def calc_averages():
allprices =[ ['', '', '', '', 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, '', 1.8, 1.3, 1.1, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.2, 1.2, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.1, 1.2, 1.4, 1.8, 1.9, 2.2] ]
averages = []
aList = []
for lst in allprices:
aList.append(lst[5])
averages.append(sum(aList)/len(aList))
return averages
这适用于计算单个月的平均值,即每个列表中第 6 个值的总和除以 5。 但是,当我尝试使用上述代码计算所有 12 个月的平均值时,它不起作用,除非我将这些空字符串更改为 0。
ef calc_averages():
allprices =[ [0, 0, 0, 0, 1.0, 2.0, 1.2, 1.3, 1.1, 0, 0, 0],
[0, 0, 0, 1.2, 1.0, 2.0, 1.2, 1.3, 1.1, 0, 0, 0],
[0, 0, 0, 1.2, 0, 1.8, 1.3, 1.1, 0, 0, 0, 0],
[0, 0, 0, 0, 1.0, 2.0, 1.2, 1.2, 0, 0, 0, 0],
[0, 0, 0, 0, 1.0, 2.0, 1.1, 1.2, 1.4, 1.8, 1.9, 2.2] ]
averages = []
aList = []
bList = []
cList = []
dList = []
eList = []
fList = []
gList = []
hList = []
iList = []
jList = []
kList = []
lList = []
for lst in allprices:
aList.append(lst[0])
bList.append(lst[1])
cList.append(lst[2])
dList.append(lst[3])
eList.append(lst[4])
fList.append(lst[5])
gList.append(lst[6])
hList.append(lst[7])
iList.append(lst[8])
jList.append(lst[9])
kList.append(lst[10])
lList.append(lst[11])
averages.append(sum(aList)/len(aList))
averages.append(sum(bList)/len(bList))
averages.append(sum(cList)/len(cList))
averages.append(sum(dList)/len(dList))
averages.append(sum(eList)/len(eList))
averages.append(sum(fList)/len(fList))
averages.append(sum(gList)/len(gList))
averages.append(sum(hList)/len(hList))
averages.append(sum(iList)/len(iList))
averages.append(sum(jList)/len(jList))
averages.append(sum(kList)/len(kList))
averages.append(sum(lList)/len(lList))
return averages
当我尝试用那些空字符串 运行 它时,它给了我这个错误;类型错误:+ 不支持的操作数类型:'int' 和 'str'
我也知道它写得不好。如果您有任何改进建议,请告诉我。已经谢谢你:)
您的问题是您试图将一个字符串和一个整数相加。
我会做
而不是 sum(aList)/len(aList)sum(list(filter(lambda x: x != '', aList)))/ len(aList)
从列表中删除所有空字符。
将我清理的所有内容打包在一起,你有多个列表:
def main():
allprices =[['', '', '', '', 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, 1.0, 2.0, 1.2, 1.3, 1.1, '', '', ''],
['', '', '', 1.2, '', 1.8, 1.3, 1.1, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.2, 1.2, '', '', '', ''],
['', '', '', '', 1.0, 2.0, 1.1, 1.2, 1.4, 1.8, 1.9, 2.2]]
alllists = [[allprices[i][j] for i in range(len(allprices))] for j in range(12)]
averages = []
for alist in alllists:
averages.append(sum(list(filter(lambda x: x != '', alist)))/ len(alist))
print(averages)
main()