如何在列表中找到最大数字

时间:2017-02-13 11:18:38

标签: python list

所以我试图在列表中找到第三大数字/字符串。这是我到目前为止的代码

def big(inputString):
    big1 = inputString[0]
    big2 = inputString[0]
    big3 = inputString[0]
    for char in inputString:
        if char > big1:
            big1, big2,big3 = char,big1,big2
        elif big1 > char > big2 > big3:
            big3 = char
    print('largest',big1,'second largest',big2,third largest,big3)

当用户输入字符串列表时,输出应该如下所示:

big('abxztu')
largest z second largest x third largest u

但我得到的输出是

largest z second largest x third largest b

任何人都可以告诉我我的代码中的错误在哪里

5 个答案:

答案 0 :(得分:2)

你不是在处理big2>的情况。 char> BIG3。

此外,您只需对字符串进行排序,然后按任意顺序打印字符,而不是这种手动强力方法。

s = sorted('abxztu')
print s # ['a', 'b', 't', 'u', 'x', 'z']

现在从尾部打印它们,或者如果你想要反转并从头部打印它们。

@Chris_Rands建议的更好的答案是使用heapq.nlargest。

print heapq.nlargest(3, 'abxztu') #['z', 'x', 'u']

答案 1 :(得分:1)

你可以这样做:

def big(inputString):
    l = sorted(list(inputString)) #Turning the input into a list and sorting it
    l = l[::-1] #Reversing the list
    print(l[0],l[1],l[2]) #Printing out the first three element of the list

这是测试运行的一个例子:

>>> big("abc")
c b a

编辑1

测试运行的另一个例子:

>>> big("helloworld")
w r o

答案 2 :(得分:1)

您可以使用内置sorted对列表进行排序。 sorted接受reverse参数(布尔值),因此您可以对列表进行降序排序。

您甚至可以将字符串传递给sorted,它会将单个字符排序到列表中。

要获取列表中的第三个,第二个或第n个最大项目,只需按降序对列表进行排序,然后调用该项目,例如obj[0]表示最大项目,obj[1]表示第二大项目

让我们把它放在一起:

""" Returns nth largest object from string or list """
def nth_largest(obj, n=1):
    obj = sorted(obj, reverse=True)
    return obj[n-1]

>>> nth_largest('abxztu', 3)
'u'

答案 3 :(得分:0)

当char小于big1且大于big2

时,缺少一个条件

代码:

def big(inputString):
    big1 = inputString[0]
    big2 = inputString[0]
    big3 = inputString[0]

    for char in inputString:
        if char > big1:
            big1, big2, big3 = char, big1, big2
        elif big1 > char > big2 > big3:
            big3 = char
        elif big3 < char < big1 > big2:
            big3 = char

    print('largest',big1,'second largest',big2,'third largest',big3)

答案 4 :(得分:0)

对于前三名:

import string
def bigger(s):
    l = [(i,string.ascii_letters.index(i)) for i in s]
    max1=max(l,key=lambda x: x[1])
    l.remove(max1)
    max2=max(l,key=lambda x: x[1])
    l.remove(max2)
    max3=max(l,key=lambda x: x[1])
    return '\n'.join([max1[0],max2[0],max3[0]])

print(bigger('zsabx'))

输出:

z
x
s

最大:

import string
def bigger(s):
    l = [(i,string.ascii_letters.index(i)) for i in s]
    max1=max(l,key=lambda x: x[1])
    return max1[0]

print(bigger('zsabx'))

输出:

z