【HackerRank 解题笔记】寻找亚军(Find the Runner-Up Score!)

大家好,小弟目前刚自学Python,由于怕自己金鱼脑,解完了上一个解到下一个时就忘记了,便想到使用写文章的方式,一方面记录自己的思维思考,另一方面后续複习时也比较能回到当时的思考逻辑。

由于文章中会有许多疑问与自我解答,加上小弟是初学者,如有问题建议直接发问会比较快获得正确解答QQ

当然如果大大们有找到我内容中的错误点,希望能够跟小弟说一下(Orz
(如果有引用,内容会是搜寻到的答案)

目前第一天,卡在HackerRank的Basic Data Types的Finding the percentage问题

题目为提交N分数,将N分数存为list并找到第二名,并且2<=n<=10

以下为初始的程式码

if __name__ == '__main__':    n = int(input())    arr = map(int, input().split())

首先看到后,我的想法是map是什么?以及我该怎么找出亚军?还有split的用法

map用法: map(function,list)

将「list 的全部内容」完成「对应的 function」
从而得知,原始程式码是将input().split()这个内容,完成对应的int() function

但之前有学过,int(内容)可以将内容整数化,那为什么不直接int(input().split())?
于是我便开始尝试

n = int(input().split())print((n))

得到的错误为

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
找寻报错的原因,其中找到了
使用 int() 函式进行强制型别转换时,要求引数x必须是字串、位元组物件、数字,不能是其它的型别
可是input不是str的资料型态吗?为什么不能int
所以我开始尝试找到input()与input().spilt()这两个资料型态

n = input()print(type(n))

输入1 2 3 4 5得出了是str

n = input().split()print(type(n))

输入1 2 3 4 5得出了是list

所以当使用者(我)input进去的东西,会是str的资料型态,而当分割后,则会形成一个list
list并不在int的型态转换里面,所以会报错!

那map是什么呢?

他能够快速的帮助我们将「list 的全部内容」完成「对应的 function」
所以map的用法map(function,list)是指将list的内容完成function
接下来我就开始思考,int不是型态吗?为什么在这边他会是function?
int() 函数用于将一个字符串或数字转换为整型。
原来int是一个资料型态,int()是一个函数!
到这边,我就懂了初始的原始码是在干嘛
原来是在将输入的n分数整数化!

那,该怎么找出亚军呢?
我原本的想法是,list可以更改,并且有max可以找出最大值
那我是不是能将list中的最大值找出来并remove掉,接着在执行一次max,这样是不是就找到了亚军?

n = int(input())arr = map(int, input().split())arrmax = max(arr)arr.remove(arrmax)print(arr)

报错了AttributeError: 'map' object has no attribute 'remove'
找了一下这个报错,得到了在python3中,map不会返回列表,而是返回一个迭代器对象
好的..有看没有懂,于是将迭代器google了一下,得到了以下解答
remove是使用在list上,而map他返回的不是list,而是里面的map里面的元素

假设以下程式码,input进去1 2 3 4 5,则map返回的会是1 2 3 4 5,而不是list

arr = map(int, input().split())

那我该怎么找出亚军呢?
我想到了迭代器是否也跟list一样,有remove的方式可以移除
但是当我google了迭代器移除,我得知了迭代器并不能够被移除的(但有特殊办法可以)

到这边后我就卡住了,因为所学中,目前尚未学习到迭代器的删减
透过讨论区后,发现有使用转换资料型态完成代码的的部分,在这边目前就先使用此方式
等待后续学习到迭代器后,再重返这题并完成该题题目。

讨论区中的编码

if __name__ == '__main__':    n = int(input())    arr = map(int, input().split())    arr = sorted(list(set(arr)))    print(arr[-2])

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章