'''给定一个长度大于3的列表,里面数字是无序的,且数字不重复,如何找到第二大的数字?
例如列表a = [1, 3, 6, 2, 7, 9],找到的结果就应该是:7
下面给出六种解决方案'''
a = [1, 3, 6, 2, 7, 9]
# 以下是使用内置方法的策略
# 1 使用sorted排序,再取倒数第二个下标值
print(sorted(a)[-2])
# 2 使用sort排序,再取倒数第二个下标值
a.sort()
print(a[-2])
# 3 先取出最大值,删除,再取最大值
max_num = max(a)
a.remove(max_num)
print(max(a))
# 以下是不使用内置方法的策略
# 4 使用两个for循环,第一个先找最大值,删除最大值,然后再找最大值
- def get_second_max_num(a)
- num = a[0]
- for i in a:
- if i > num:
- num = i
- a.remove(num)
- res = a[0]
- for j in a:
- if j > res:
- res = j
- return res
# 5 使用两个数字分别表示最大数和第二大数,然后一次for循环进行遍历,比较后再进行赋值
- def get_second_max_num2(a)
- le = len(a)
- if a[0] > a[1]:
- max_num = a[0]
- second_max_num = a[1]
- else:
- max_num = a[1]
- second_max_num = a[0]
- for i in range(2, le):
- if a[i] > max_num:
- second_max_num = max_num
- max_num = a[i]
- else:
- if a[i] > second_max_num:
- second_max_num = a[i]
- return second_max_num
# 6 使用两个数字分别表示最大数和第二大数,然后一次while循环进行遍历,比较后再进行赋值
- def get_second_max_num3(a)
- le = len(a)
- if a[0] > a[1]:
- max_num = a[0]
- second_max_num = a[1]
- else:
- max_num = a[1]
- second_max_num = a[0]
- i = 2
- while i < le:
- if a[i] > max_num:
- second_max_num = max_num
- max_num = a[i]
- else:
- if a[i] > second_max_num:
- second_max_num = a[i]
- i += 1
- return second_max_num