根据参加者的大学运动会成绩单,您需要找到亚军成绩。给你分数。将它们存储在列表中并找到亚军的分数。
输入格式
第一行包含 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)
地图是一个非常简单的内置函数。
因此它将应用于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类型。