如何处理Python2.7中的“数组/列表”以使“(int,list)->float”
我有这个功能:如何处理Python2.7中的“数组/列表”以使“(int,list)->float”,python,python-2.7,Python,Python 2.7,我有这个功能: def findScore(g): gLetter = ["A", "B", "C", "D", "F"] gPoint = [4.0, 3.0, 2.0, 1.0, 0.0] for i, v in enumerate(gLetter): if v==g: gp = gPoint[i] return gp 我想记下科目的数量,然后通过调用findScore来记下每个科目的分数字母,然后再使用一个函数返回
def findScore(g):
gLetter = ["A", "B", "C", "D", "F"]
gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
for i, v in enumerate(gLetter):
if v==g:
gp = gPoint[i]
return gp
我想记下科目的数量,然后通过调用findScore来记下每个科目的分数字母,然后再使用一个函数返回GPA,如下所示:
def findGPA(n, list):
注意到:
科目编号n和等级字母列表
findGPA必须调用findScore将每个成绩字母转换为成绩点
什么是功能体
我希望输出应该如下所示:
>>> findGPA(3, ['A', 'B', 'C'])
3.0
>>> findGPA(4, ['B', 'B', 'C', 'B'])
2.75
'''
使用字典查找分数,然后在传入的列表中查找每个分数,求和除以分数:
def grd_dict():
gLetter = ["A", "B", "C", "D", "F"]
gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
return dict(zip(gLetter, gPoint))
def find_gpa(num, grds):
scores = grd_dict()
return sum((scores[g] for g in grds),0.0) / num
输出:
In [2]: find_gpa(4, ['B', 'B', 'C', 'B'])
Out[2]: 2.75
In [3]: find_gpa(3, ['A', 'B', 'C'])
Out[3]: 3.0
就我个人而言,我会在一个函数中完成这一切,只需要一个分数列表,你可以从传入的列表中获得科目的数量,所以num不是真正需要的
dict是进行查找的最有效的方法,但是如果您必须使用列表,那么您可以使用与文档中的示例密切相关的逻辑:
lengrds或1也将处理空列表:
In [44]: find_gpa(['F', 'F', 'F'])
Out[44]: 0.0
In [45]: find_gpa(['B', 'B', 'C', 'B'])
Out[45]: 2.75
In [46]: find_gpa(['A', 'B', 'C'])
Out[46]: 3.0
In [47]: find_gpa([])
Out[47]: 0.0
使用对分,您可以在logn time中搜索已排序的结构,而不是潜在地查看每个元素。使用等级分数字典,然后只需在传入的列表中查找每个等级,求和除以等级数:
def grd_dict():
gLetter = ["A", "B", "C", "D", "F"]
gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
return dict(zip(gLetter, gPoint))
def find_gpa(num, grds):
scores = grd_dict()
return sum((scores[g] for g in grds),0.0) / num
输出:
In [2]: find_gpa(4, ['B', 'B', 'C', 'B'])
Out[2]: 2.75
In [3]: find_gpa(3, ['A', 'B', 'C'])
Out[3]: 3.0
就我个人而言,我会在一个函数中完成这一切,只需要一个分数列表,你可以从传入的列表中获得科目的数量,所以num不是真正需要的
dict是进行查找的最有效的方法,但是如果您必须使用列表,那么您可以使用与文档中的示例密切相关的逻辑:
lengrds或1也将处理空列表:
In [44]: find_gpa(['F', 'F', 'F'])
Out[44]: 0.0
In [45]: find_gpa(['B', 'B', 'C', 'B'])
Out[45]: 2.75
In [46]: find_gpa(['A', 'B', 'C'])
Out[46]: 3.0
In [47]: find_gpa([])
Out[47]: 0.0
使用对分,您可以在logn-time中搜索排序结构,而不是潜在地查看每个元素。findGPA实际上不需要您所建议的第一个参数,因为您可以只找到等级字母列表的长度
您可以使用findScore函数和列表理解来计算每个年级的分数,然后使用sum函数求和。最后,用len函数除以分数列表的长度
>>> gLetter = ["A", "B", "C", "D", "F"]
>>> gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
>>> mapped_values = dict(zip(gLetter, gPoint))
>>> def find_gpa(score):
... return sum(mapped_values[g] for g in score) / len(score)
...
>>> find_gpa(['A', 'B', 'C'])
3.0
可以这样做:
def findGPA(grades):
return sum([findScore(x) for x in grades]) / max(len(grades), 1)
然后,这将提供所需的输出:
>>> findGPA(['A', 'B', 'C'])
3.0
>>> findGPA(['B', 'B', 'C', 'B'])
2.75
findGPA实际上不需要像您所建议的那样使用它的第一个参数,因为您可以找到等级字母列表的长度
您可以使用findScore函数和列表理解来计算每个年级的分数,然后使用sum函数求和。最后,用len函数除以分数列表的长度
>>> gLetter = ["A", "B", "C", "D", "F"]
>>> gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
>>> mapped_values = dict(zip(gLetter, gPoint))
>>> def find_gpa(score):
... return sum(mapped_values[g] for g in score) / len(score)
...
>>> find_gpa(['A', 'B', 'C'])
3.0
可以这样做:
def findGPA(grades):
return sum([findScore(x) for x in grades]) / max(len(grades), 1)
然后,这将提供所需的输出:
>>> findGPA(['A', 'B', 'C'])
3.0
>>> findGPA(['B', 'B', 'C', 'B'])
2.75
实际上,你不需要两个函数,你也可以完全删除find_gpa函数的第一个参数,使用内置函数
>>> gLetter = ["A", "B", "C", "D", "F"]
>>> gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
>>> mapped_values = dict(zip(gLetter, gPoint))
>>> def find_gpa(score):
... return sum(mapped_values[g] for g in score) / len(score)
...
>>> find_gpa(['A', 'B', 'C'])
3.0
如果您使用的是Python3.4或更新版本,则可以使用模块中的函数
演示:
实际上,你不需要两个函数,你也可以完全删除find_gpa函数的第一个参数,使用内置函数
>>> gLetter = ["A", "B", "C", "D", "F"]
>>> gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
>>> mapped_values = dict(zip(gLetter, gPoint))
>>> def find_gpa(score):
... return sum(mapped_values[g] for g in score) / len(score)
...
>>> find_gpa(['A', 'B', 'C'])
3.0
如果您使用的是Python3.4或更新版本,则可以使用模块中的函数
演示:
findGPA的第一个参数应该做什么?findGPA的第一个参数应该做什么?哦,我只是想从第一个参数做更多的函数。你可能想除以maxlengrades,1以避免数组为空时被零除。@JoachimIsaksson谢谢,我已经改变了答案。哦,我只是想从第一个参数开始做更多的函数。你可能想除以maxlengrades,1以避免在数组为空的情况下被零除。@JoachimIsaksson谢谢,我已经改变了我的答案。将两个功能合并为一个不是更好吗?…除了OP设计之外,还有什么特别的原因需要两个功能吗?@IronFist,如果你在多个用户的循环中反复发现gpa的发言权,我会首先调用scores=grd_dict,然后对每个用户使用该dict,如果每次运行一次调用,我只需在一个函数中完成所有操作。在这种情况下,我只使用了这两个函数来匹配OP。只需通过g级列表,并使用g的len代替numIsn,将两个函数合并为一个不是更好吗?…除了OP设计之外,还有什么特别的原因吗?@IronFist,如果你在一个循环中反复为多个用户找到gpa的发言权,我会首先调用scores=grd_dict,然后为每个用户使用该dict,如果每次运行一次调用,我会在一个函数中完成所有操作。在这个例子中,我只使用了这两个来匹配OP。只需传递等级g的列表,并使用g的len代替num