对于初学者,以下几个函数:
split()
split()
是字符串的一个方法,它将字符串按照指定的分隔符进行拆分,返回一个字符串列表。默认情况下,split()
方法使用空白字符(如空格、制表符)作为分隔符。
示例:对于字符串 "1 2 3 4 5"
,调用 "1 2 3 4 5".split()
会得到列表 ["1", "2", "3", "4", "5"]
。
map()
map()
函数接受两个参数:一个函数和一个可迭代对象(如列表或字符串)。它将指定的函数应用到可迭代对象的每一个元素上,并返回一个map
对象。
示例:map(int, ["1", "2", "3"])
将会把每个字符串元素转换为整数,得到一个 map
对象。
为什么要将map对象转换为列表?
将
map
对象转换为列表主要是因为map
对象是一个迭代器,它一次只能遍历一遍,并且不能直接索引或切片。转换为列表后,可以:
- 重复使用:列表允许多次遍历和索引,而
map
对象只允许单次遍历。- 方便操作:列表提供更多的操作方法,例如切片、排序、添加和删除元素等。
- 兼容性:在需要将结果传递给不接受
map
对象的函数或方法时,列表更为通用。如果只需要一次性处理数据而不需要重新访问,可以选择直接使用
map
对象,但在大多数情况下,转换为列表更为实用。
为什么要将map对象只能被访问一次?
map
对象是一个迭代器,它是基于惰性计算的,只会在每次迭代时生成一个结果。它没有存储所有结果的能力,所以你只能遍历它一次。当你遍历map
对象时,它会逐步计算每个元素并返回结果,一旦遍历完成,它的内容就会被消耗掉。
举例说明一下:
假设我们要对用户输入的数字列表进行两次遍历。一遍是打印每个数字,另一遍是计算这些数字的总和。
使用 map
对象
input_str = "1 2 3 4 5"
str_list = input_str.split() # ['1', '2', '3', '4', '5']
int_map = map(int, str_list)
# 第一次遍历
for num in int_map:
print(num) # 打印每个数字
# 第二次遍历(将会失败)
total_sum = sum(int_map) # 这里会抛出错误,因为 int_map 不能被重新遍历
print(total_sum)
输出:
1
2
3
4
5
Traceback (most recent call last):
...
TypeError: 'map' object is not subscriptable
【注】"Subscriptable" 意为 "capable of being indexed" or "able to use indexing".即“可下标访问的”或“可以用索引访问的”。在 Python 中,列表、字符串、元组等都是subscriptable 的,因为可以用索引访问它们的元素,例如 my_list[0] 或 my_string[1]。
最终代码,逻辑很简单:
if __name__ == '__main__':
n = int(input())
arr = list(map(int, input().split()))
first_max = -float('inf')#“-float('inf')”表示负无穷大
second_max = -float('inf')
for i in arr:
if i > first_max:
second_max = first_max
first_max = i
elif i > second_max and i < first_max:
second_max = i
print(second_max)
输出结果: