把数组反过来,并且让元素类型变成 float

这道题考什么?

这道题其实很简单,不是考复杂的 NumPy 操作,而是考你能不能完成这 3 步:

  1. 读入一行数字;
  2. 把这些数字变成一个 NumPy 数组;
  3. 把数组反过来,并且让元素类型变成 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、打印”这几步。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇