joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89
使用文本文件studentdata.txt文件上面,我写了一个程序,计算每个学生的平均成绩,打印出学生的名字和他们的平均成绩。这是我的密码:
with open('studentdata.txt','r') as f:
for line in f:
items = line.split()
total = 0
grades = items[1:]
for grade in grades:
total = total + int(grade)
print (items[0], (total/(len(grades))))
它工作,但我想让它更简单,使用lambda函数。我该怎么做呢?你知道吗
我将构建一个字典(使用dictionary comprehension),key:student name,value:mean of student mark,根据空格拆分并定义lambda来计算平均值(将所有值的列表理解传递给它,这样它就可以在不使用迭代器的情况下计算
sum
和len
):结果:
str.partition
用于返回名称(根据第一个空格字符进行拆分)。你知道吗这是一行代码,包括:列表理解,dict理解,lambda。复杂,但逻辑性和性能(尽管
split
部分做了两次,因为行中的数据是异构的:name&marks)无需lambda函数即可简化此过程:
with
语法。您也不需要'r'
参数,因为它是默认参数。你知道吗grades
中的每个值转换为整数,然后求和。你知道吗如果您有Python3.x,您可以编写更漂亮的代码:
line.split
返回的列表中提取一个值,将其放入name
,然后将剩下的-放入列表grades
。你知道吗total
,将sum(...)
移到对print
的调用中以保存一行代码,但这可能会影响可读性,因此我不建议这样做。你知道吗相关问题 更多 >
编程相关推荐