python寻找第二大的数(Runner-Up)

对于初学者,以下几个函数:

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 对象是一个迭代器,它一次只能遍历一遍,并且不能直接索引或切片。转换为列表后,可以:

  1. 重复使用:列表允许多次遍历和索引,而 map 对象只允许单次遍历。
  2. 方便操作:列表提供更多的操作方法,例如切片、排序、添加和删除元素等。
  3. 兼容性:在需要将结果传递给不接受 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)

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值