n = int(input())
nums = map(int, input().split())
print(sorted(list(set(nums)))[-2])
有人能解释一下为什么我们在这里使用了map函数吗?
如果有人能解释一下这一行:
nums = map(int, input().split())
n = int(input())
nums = map(int, input().split())
print(sorted(list(set(nums)))[-2])
有人能解释一下为什么我们在这里使用了map函数吗?
如果有人能解释一下这一行:
nums = map(int, input().split())
因此,我们可以采用这行代码:
nums = map(int, input().split())
并将其分解为几个子部分:
nums_in = input()
nums_split = nums_in.split()
nums = map(int, nums_split)
为了按顺序处理,nums_in
将作为字符串读入数字列表。对于输入字符串 "1 5 73 29"
,它将是:
nums_in = "1 5 73 29"
nums_split
将是每个数字字符串拆分为一个列表的数字列表:
nums_split = ["1", "5", "73", "29"]
map
函数将会在列表中的每个项(在这个例子中是"1", "5", "73", "29"
)上调用一个函数(在这个例子中是int
),并创建一个新的列表,其中包含该函数返回的值。因此,对于这个例子:nums = [1, 5, 73, 29]
map
函数总是返回一个列表,因此在Python 3中,我们需要添加一步:nums = list(map(int, nums_split))
或者,可以在两种语言中使用我最喜欢的Python结构之一,即列表推导式:
nums = [int(n) for n in nums_split]
map
会给你一个迭代器,而不是一个列表。 - decezemap()函数将给定的函数应用于可迭代对象中的每个项,并返回结果列表。 然后,可以将来自map()的返回值(map对象)传递给诸如list()(创建列表)、set()(创建集合)等函数。
示例1:map()如何工作?
def calculateSquare(n):
return n*n
numbers = (1, 2, 3, 4)
result = map(calculateSquare, numbers)
print(result)
# converting map object to set
numbersSquare = set(result)
print(numbersSquare)
<map object at 0x7f722da129e8>
{16, 1, 4, 9}
map()函数对可迭代对象中的每个元素执行指定的函数,并将该元素作为参数发送到函数中。
map(function, iterables)
Map将一个函数应用于输入列表中的所有项目。
大多数情况下,我们希望逐个将所有列表元素传递给函数,然后收集输出。例如:
items = [1, 2, 3, 4, 5]
squared = []
for i in items:
squared.append(i**2)
Map允许我们以更简单、更好的方式实现这一点。下面是代码示例:
items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))
map不是很符合Python的风格。我建议使用列表推导式代替:
map(f, iterable)
基本上相当于:
[f(x) for x in iterable]
单独使用 map 不能进行笛卡尔积,因为其输出列表的长度总是与输入列表相同。但你可以通过列表推导式轻松完成笛卡尔积:
[(a, b) for a in iterable_a for b in iterable_b]
这个语法有点令人困惑,基本上等同于:
result = []
for a in iterable_a:
for b in iterable_b:
result.append((a, b))
Map是一个非常简单的内置函数。
因此,它将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.
所以,通过split()
函数分隔的输入中的所有项都被映射到int()函数。因此,所有项都转换为int类型。
if __name__ == '__main__':
n = int(input())
arr = list(map(int, input().split()))
maxv = max(arr)
l = list(filter(lambda x: x != maxv,arr))
print(max(l))
l = list(filter(lambda x: x != maxv,arr))
- Eugene_Sset()
来删除重复项,并使用逆向的sort()
找出所需的元素。希望这是最简单的方法来解决这个问题。if __name__ == '__main__':
n = int(input())
arr = map(int, input().split())
x = set(arr)
x = list(x)
x.sort(reverse=True)
print(x[1])
if __name__ == '__main__':
n = int(input()) # Declaring size of array eg: 5 <- 5 values
arr = map(int, input().split()) # Values in array eg: 1 2 3 4 5
scores = [x for x in arr] # Storing values of array in a list
print(max([x for x in scores if x!= max(scores)]))
这个想法是创建2个列表:
array
和scores
都不是必需的。只需执行scores = list(map(int, input().split()))
即可... - Tomerikoomax(scores)
。将其在列表推导式之外调用一次并使用保存的值会更简单... - Tomerikoo我使用排序和函数解决了这个问题,然后我们可以得到最大项之前的亚军分数。
if __name__ == '__main__':
n = int(input())
arr = map(int, input().split())
list =[]
for val in arr:
if val in list:
continue
else:
list.append(val)
sorted = sorted(list)
print (sorted[-2])
result = list(arr)
rem_val = []
max_v = max(result)
for i in result:
if i < max_v:
rem_val.append(i)
print(max(rem_val))
你也可以用这种方式来实现。首先,我们应该确保没有任何重复值,因此我们将给定的值集合化以去除重复项,然后按降序对其进行排序。接着,我们打印出列表中索引为1的第二高的数值。
if __name__ == '__main__':
n = int(input())
arr = map(int, input().split())
arr_set = set(arr)
arr_list = list(arr_set)
arr_list.sort(reverse = True)
print(arr_list[1])
我发现这个答案是迄今为止最简单和最有效的。
ordered = sorted(set(list(arr)))
最后,只需打印有序集并请求倒数第二个[-2]值。
print(ordered [-2])
num1 = int('1')
等等。 - Frederik.L