首页 > 解决方案 > 如何在平方和 python 程序中解决此错误以在列表中查找第二大数?

问题描述

def get_second_largest(num):
    largest = num[0]
    second_largest = num[0]
    while i < len(num) :
        if num[i] > largest:
            second_largest = largest
            largest = num[i]
        elif num[i] > second_largest:
            second_largest = nums[i]
return second_largest


i = int(input("Enter Numbers "))
list_1 = list(i.split(" ,"))

second_largest = get_second_largest(list_1)
print("Second largest number is :", second_largest)

我得到了什么

Enter Numbers 5 10
Traceback (most recent call last):
  File "C:\Users\user\Desktop\Python through atom\Find_The_Second_Largest_Num.py", line 15, in <module>
    second_largest = get_second_largest(list_1)
  File "C:\Users\user\Desktop\Python through atom\Find_The_Second_Largest_Num.py", line 4, in get_second_largest
    while i < len(num) :
TypeError: '<' not supported between instances of 'str' and 'int'

标签: pythonpython-3.x

解决方案


当您使用 Python 内置函数读取某些输入时,它会将输入转换为字符串(去除尾随换行符)并返回。官方文档

>>> i = input("-->")
-->1 ,2 , 4 ,8
>>> i
'1 ,2 , 4 ,8'
>>> i.split(" ,")
['1', '2', ' 4', '8']

string在拆分时执行从to 的显式转换int将解决您的错误。

>>> l = [int(n) for n in i.split(" ,")]
>>> l
[1, 2, 4, 8]

还有几点需要指出:

  1. int(input("Enter Input"))抛出 ValueError 因为如doc中所述,输入函数返回一个字符串。
  2. list(i.split(" ,"))默认情况下str.split()返回单词列表。所以不需要显式转换为列表。
  3. 实现您的目标(即找到第二大数字)的更 Pythonic 方法是利用sort() / sorted()内置函数以及列表索引。(正如@mohideen-bin-mohammed 所建议的那样)

推荐阅读