gpt4 book ai didi

python - 列出问题 : can't find where I have made mistakes 的元组

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:56 25 4
gpt4 key购买 nike

对于文件:

Year  Grade
2000 100
2002 95
2001 88
2012 99
2000 66

等等,我创建了一个函数来计算接下来每年的平均成绩。然而,我发现我不是在最后得到一个列表,而是不断地得到一个元组。

我必须获得一个列表而不是元组才能通过断言测试。

 years, average_grades = [],[]
d = {}

with open(file,'r') as f:
next(f)
for line in f:
year, grade = (s.strip() for s in line.split(','))
if year in d:
d[year][0] += int(grade)
d[year][1] += 1
else:
d[year] = [int(grade),1]

for year, grades in d.items():
years.append(int(year))
average_grades.append(float(grades[0]) / grades[1])
years, average_grades = zip(*sorted(zip(years, average_grades), key= lambda p: p[0]))

return years, average_grades

这个功能实际上给了我

年份、年级2000, 832001, 882002, 952012年,99

与此类似的东西。它给了我每年的平均值。然而,它应该是有序的(根据年份),所以我已经完成了最后一步。

应该通过这个:

years_answer = [i+2000,i 在范围 (0,5) 内] 断言_等于(年,年_答案)

我收到的错误:

AssertionError: (2000, 2001, 2002, 2003, 2004, 2005, 2006[62 chars]2017) != [2000, 2001, 2002, 2003, 2004, 2005, 2006[62 chars]2017]

对于解决此类问题有什么建议吗?

最佳答案

选择以下选项之一:-
1. return list(years),list(average_grades) 代替 returnyears,average_grades
2.使用assert_equal(list(years),years_answer)
3. 使用 assert_equal(years, tuple(years_answer))
4. 使用 years_answer = (i+2000 for i in range(0,5))

另外,我不明白你的说法这个函数实际上给了我:Year, Grade 2000, 83 2001, 88 2002, 95 2012, 99。根据代码和 OP 函数中的错误实际上给出了 year=(2000,2001,2002...)average_grades=(83,88,95...)

让我们了解一下

years, average_grades = zip(*sorted(zip(years, average_grades), key= lambda p: p[0]))

首先让我们看看 zip does是什么。让我们将上面的语句分成更小的步骤......

years=[2001,2000,2002...]
average_grades=[88,83,95...]
it=zip(years, average_grades)

it的末尾是元组的迭代器。

   list(it)=[(2001,88), (2000,83),(2002,95)...]  #State of variable

排序后..

st=sorted(it, key= lambda p: p[0])              #sorted returns a list
st=[(2000,83), (2001,88), (2002,95)...] #State of variable

现在重新压缩元组..

ft=zip(*st)                                     #Note that zip takes only multiple arguments thus we need to splay the list using *
list(ft)=[(2000,2001,2002...),(83,88,95...)] #State of variable

现在终于当你这样做的时候...

years,average_grades=ft
years=(2000,2001,2002...) #State of variable
average_grades=(83,88,95...) #State of variable

此时 yearsaverage_grades 是元组而不是列表。

关于python - 列出问题 : can't find where I have made mistakes 的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46774991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com