
这道题考什么?
这道题其实很简单,不是考复杂的 NumPy 操作,而是考你能不能完成这 3 步:
- 读入一行数字;
- 把这些数字变成一个 NumPy 数组;
- 把数组反过来,并且让元素类型变成
float。
题目要求输出:
[-10. -8. 4. 3. 2. 1.]
注意这里不是整数,而是浮点数,所以会显示成 -10.、-8.、4. 这种形式。
基本思路
输入是:
1 2 3 4 -8 -10
程序读进来以后,先得到一个字符串:
"1 2 3 4 -8 -10"
然后用 split() 按空格切开,得到列表:
['1', '2', '3', '4', '-8', '-10']
注意:这里每个元素还是字符串,不是数字。
接着把它转换成 NumPy 数组,并指定类型为 float:
numpy.array(['1', '2', '3', '4', '-8', '-10'], float)
得到:
[ 1. 2. 3. 4. -8. -10.]
最后反转:
[-10. -8. 4. 3. 2. 1.]
推荐写法
如果题目给了函数模板,通常可以这样写:
import numpy
def arrays(arr):
return numpy.array(arr[::-1], float)
arr = input().strip().split()
result = arrays(arr)
print(result)
每一行是什么意思?
1. 导入 NumPy
import numpy
表示我们要使用 NumPy 这个库。
2. 定义函数
def arrays(arr):
这里定义了一个函数,函数名叫 arrays。
它接收一个参数 arr。
在这道题里,arr 大概长这样:
['1', '2', '3', '4', '-8', '-10']
3. 反转列表
arr[::-1]
这是 Python 的切片写法,意思是:从后往前取所有元素。
例如:
arr = ['1', '2', '3', '4', '-8', '-10']
print(arr[::-1])
结果是:
['-10', '-8', '4', '3', '2', '1']
这里的核心是 [::-1]。
可以先这样理解:
列表[::-1]
意思就是:
把列表反过来
4. 转成 NumPy 数组,并指定 float 类型
numpy.array(arr[::-1], float)
这句做了两件事:
第一,把反转后的列表变成 NumPy 数组。
第二,把里面的元素转换成浮点数 float。
所以:
['-10', '-8', '4', '3', '2', '1']
会变成:
[-10. -8. 4. 3. 2. 1.]
5. 读取输入
arr = input().strip().split()
这句也做了几件事。
假设用户输入:
1 2 3 4 -8 -10
input() 得到的是字符串:
"1 2 3 4 -8 -10"
strip() 去掉字符串首尾多余空格。
split() 按空格切分,得到列表:
['1', '2', '3', '4', '-8', '-10']
所以这一行执行完后,arr 是一个字符串列表。
从思路到代码
遇到这种题,先不要急着写代码,先用自然语言想清楚步骤。
题目说:
给你一行空格分隔的数字,输出反转后的 NumPy 数组,元素类型是 float。
我们可以拆成:
第一步,读入一行内容。
input()
第二步,把这一行按空格拆成列表。
input().strip().split()
第三步,把列表反转。
arr[::-1]
第四步,把反转后的列表变成 NumPy 数组,并指定类型为 float。
numpy.array(arr[::-1], float)
第五步,打印结果。
print(result)
组合起来就是:
import numpy
def arrays(arr):
return numpy.array(arr[::-1], float)
arr = input().strip().split()
result = arrays(arr)
print(result)
也可以这样写
如果不考虑题目模板,最简写法是:
import numpy
arr = input().split()
arr = numpy.array(arr, float)
print(arr[::-1])
这段代码的逻辑是:
先把输入变成 NumPy 数组,再反转数组。
和前面那种写法相比,区别是:
numpy.array(arr[::-1], float)
是先反转列表,再转成 NumPy 数组。
而:
arr = numpy.array(arr, float)
print(arr[::-1])
是先转成 NumPy 数组,再反转数组。
对于这道题来说,两种都可以。
常见错误
错误 1:忘记指定 float
如果写成:
numpy.array(arr[::-1])
得到的可能还是字符串类型数组,或者不是题目要求的浮点数组。
题目明确要求:
element type float
所以要写:
numpy.array(arr[::-1], float)
错误 2:不理解 input() 得到的是字符串
很多初学者会以为输入的 1 2 3 直接就是数字。
其实:
input()
得到的一定是字符串。
所以输入:
1 2 3
程序拿到的是:
"1 2 3"
需要用:
split()
把它切开。
错误 3:把 [::-1] 写错
反转整个列表或数组,写法是:
arr[::-1]
不是:
arr[-1]
arr[-1] 只表示最后一个元素。
例如:
arr = [1, 2, 3]
print(arr[-1])
结果是:
3
而:
print(arr[::-1])
结果是:
[3, 2, 1]
本题最终答案
import numpy
def arrays(arr):
return numpy.array(arr[::-1], float)
arr = input().strip().split()
result = arrays(arr)
print(result)
小练习
题目:输入一行空格分隔的数字,把它转换成 NumPy 浮点数组后,输出原数组,不需要反转。
例如输入:
3 5 7 9
期望输出类似:
[3. 5. 7. 9.]
提示:这次不需要使用 [::-1],只需要完成“输入、切分、转 NumPy 数组、指定 float、打印”这几步。



