2017-02-13 28 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) 
相關問題