查找亚军得分 >> 说明

ari*_*hit 9 python

根据参加者的大学运动会成绩单,您需要找到亚军成绩。给你分数。将它们存储在列表中并找到亚军的分数。

输入格式

第一行包含 N。第二行包含 N 个整数的数组,每个整数用空格分隔。

我找到了这个解决方案

n = int(input())

nums = map(int, input().split())    
print(sorted(list(set(nums)))[-2])
Run Code Online (Sandbox Code Playgroud)

有人能解释一下为什么我们在这里使用地图功能吗?

另外,如果有人可以向我解释这一行:

nums = map(int, input().split())
Run Code Online (Sandbox Code Playgroud)

小智 7

所以我们可以采取这一行:

nums = map(int, input().split())
Run Code Online (Sandbox Code Playgroud)

并将其分解为几个子部分:

nums_in = input()
nums_split = nums_in.split()
nums = map(int, nums_split)
Run Code Online (Sandbox Code Playgroud)

按顺序,nums_in将是作为字符串读入的数字列表。对于输入字符串"1 5 73 29",它将是:

nums_in = "1 5 73 29"
Run Code Online (Sandbox Code Playgroud)

nums_split 然后将数字列表拆分为每个数字的字符串:

nums_split = ["1", "5", "73", "29"]
Run Code Online (Sandbox Code Playgroud)

现在,该map函数将对int列表中的每个项目(在本例中)调用一个函数(在本例"1", "5", "73", "29"中),并使用函数返回的值创建一个新列表。所以,对于这个例子:

nums = [1, 5, 73, 29]
Run Code Online (Sandbox Code Playgroud)

mapPython 2 中函数总是返回一个列表,因此在Python 3 中,我们需要再添加一个步骤:

nums = list(map(int, nums_split))
Run Code Online (Sandbox Code Playgroud)

或者,在两者中使用我最喜欢的 Python 结构之一,列表理解

nums = [int(n) for n in nums_split]
Run Code Online (Sandbox Code Playgroud)


Vin*_*Sai 1

地图是一个非常简单的内置函数。

因此它将应用于function可迭代系列中的每个项目,即sequence

map(function, sequence)

因此,在您的情况下,nums = map(int, input().split()) input().split() 返回一个列表。对于该列表中的每个项目,int都会应用该函数。

这在语法上等于

ls = []
for item in items: # here items is the sequence returned by split
    res = int(item)
    ls.append(res)
# ls will be list that the map returns.
Run Code Online (Sandbox Code Playgroud)

因此,输入中由函数分隔的所有项目都split()映射到 int() 函数。所以所有的项都转换为int类型。