Python 如何在没有类型错误的情况下从列表中找到范围、平均值和前三个值?
我是python新手,正在从事一个小项目: 90、75、65、50、40是以下等级 我的代码:Python 如何在没有类型错误的情况下从列表中找到范围、平均值和前三个值?,python,function,sorting,range,average,Python,Function,Sorting,Range,Average,我是python新手,正在从事一个小项目: 90、75、65、50、40是以下等级 我的代码: grade1 = int(input("Enter grade 1:")) grade2 = int(input("Enter grade 2:")) grade3 = int(input("Enter grade 3:")) grade4 = int(input("Enter grade 4:")) grade5 = int(input("Enter grade 5:")) numbers = [
grade1 = int(input("Enter grade 1:"))
grade2 = int(input("Enter grade 2:"))
grade3 = int(input("Enter grade 3:"))
grade4 = int(input("Enter grade 4:"))
grade5 = int(input("Enter grade 5:"))
numbers = [grade1,grade2,grade3,grade4,grade5]
sorted_grades = sorted(numbers)
topthree = sorted_grades[-1,-2,-3]
但是,在运行topthree时,我收到一个错误:
TypeError:列表索引必须是整数或切片,而不是元组
如何避免这种情况?您需要像这样使用列表切片:
topthree = sorted_grades[:-4:-1]
我知道上面写着-4
,但它需要前三名
如果要使用列表,则需要付出更多的努力:
indices = [-1, -2, -3]
topthree = [sorted_grades[i] for i in indices]
您还可以反向排序:
sorted_grades = sorted(numbers, reverse=True)
topthree = sorted_grades[:3]
假设您已将成绩收集到名为
成绩的列表中:
# New list of sorted entries
sorted_grades = sorted(grades)
# Sum of all list entries divided by the length
average = sum(grades)/len(grades)
# Last entry minus the first entry
range = grades[-1] - grades[0]
# Slice from the third-to-last entry to the end of the list
top_three = grades[-3:]
负索引和切片等语法将在以下章节中进一步讨论:
与字符串(以及所有其他内置序列类型)一样,列表可以索引和切片:
>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]
>>> squares[0] # indexing returns the item
1
>>> squares[-1]
25
>>> squares[-3:] # slicing returns a new list
[9, 16, 25]
所有切片操作都返回一个包含请求元素的新列表。这意味着以下切片将返回列表的新(浅层)副本:
>>> squares[:]
[1, 4, 9, 16, 25]
列表索引/切片的一般格式是some\u list[start:stop:step]
:
>>> numbers = [1,3,5,7,9]
>>> numbers[0:3] # slice from the first element to the third
[1, 3, 5]
>>> numbers[:3] # 0's can be omitted
[1, 3, 5]
>>> numbers[1:3] # slice from the second element to the third
[3, 5]
>>> numbers[3:] # slice from the third element to the end
[7, 9]
>>> numbers[-3:] # slice from the third-to-last to the end
[5, 7, 9]
>>> numbers[::-1] # slice of the whole list, stepping backward by 1 for each entry
[9, 7, 5, 3, 1]
>>> numbers[1::2] # slice of every other entry, starting with the second
[3, 7]
注意列表切片是末端独占的,因此numbers[1:2]
只返回第二个条目:[3]
Python使用:
符号进行列表切片。因此,不要使用topthree=sorted_grades[-1,-2,-3]
,而是使用topthree=sorted_grades[-1:-4:-1]
。
列表切片的格式是[开始:停止:步骤]
您希望从排序的分数[-1,-2,-3]
中得到什么?我正在尝试获得最高分数。所以在这个例子中,我想要90,75,60,它应该去掉最低的两个@carcigenicate。看起来你需要使用负索引,例如sorted_grades[-3:]
或sorted_grades[-3::[:::-1]
我使用了topthree=sorted_grades[-4:-1],但是我如何得到范围和平均值呢?最大数减去最小数的范围topthree@user9991165请避免在同一问题中问多个不同的问题。如果需要,问另一个人;每个问题针对一个特定的问题。对于你的其他两个问题,有很多答案。