2017-02-13 97 views
0

所以我试图找到列表中第三大数字/字符串。这是我的代码至今如何在列表中找到最大数字

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 

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

+0

如果big2> char> big3会怎么样? – Fallen

+0

如何定义最大数量?你的代码似乎没有考虑多个数字的数字 – Sayse

+0

为什么不使用'sorted'并根据它取最大值,'third_largest,second_largest,largest = sorted('abxztu')[ - 4: - 1]' –

回答

2

你没有处理的情况下big2> char> big 3。

而不是这种手动蛮力的方法,你可以排序字符串,然后以任何顺序打印字符。

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

现在从尾部打印出来,或者如果你想扭转S和从头部打印出来。

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

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

'heapq.nlargest'总比这排序好 –

+0

@Chris_Rands我同意。这个解决方案应该是一个答案,而不是一个评论:) – Fallen

+0

建议你将它添加到你的答案:) –

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 
+0

你的测试案例并没有真正显示太多,它可能更好地使用测试,至少有4项,并且不只是需要颠倒没有排序,尝试OP输入:''abxztu'' –

+1

Thx的评论尼克,我现在编辑我的答案,通过添加一个使用更复杂的字符串的例子 – Ashiro

1

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

你甚至可以传递一个字符串到sorted它会将单个字符排序成一个列表。

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

让我们把它在一起:当焦比BIG2

代码小于BIG1和更大的

""" 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' 
+0

@TobySpeight我的坏,我想这在上下文中是不言自明的,但正如你所说,为未来的搜索者提供周围环境会更好。更新了我的答案。 – daveruinseverything

0

的条件是失踪:

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) 
相关问题