Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在没有类型错误的情况下从列表中找到范围、平均值和前三个值?_Python_Function_Sorting_Range_Average - Fatal编程技术网

Python 如何在没有类型错误的情况下从列表中找到范围、平均值和前三个值?

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 = [

我是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,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请避免在同一问题中问多个不同的问题。如果需要,问另一个人;每个问题针对一个特定的问题。对于你的其他两个问题,有很多答案。