2017-02-13 5 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 인 경우를 처리하지 않습니다. 삼.

또한이 수동 무작위 접근 방식 대신 문자열을 정렬 한 다음 임의의 순서로 문자를 인쇄 할 수 있습니다.

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

이제 꼬리에서 인쇄하거나 역순으로 인쇄하여 머리에서 인쇄하십시오.

@Chris_Rands가 제안하는 더 나은 대답은 heapq.nlargest를 사용하는 것입니다.

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

'heapq.nlargest'가 이것을 위해 정렬 된 것보다 낫습니다 –

+0

@Chris_Rands 동의합니다. 이 해결책은 논평 대신 답이 될만한 가치가 있습니다. – Fallen

+0

답변에 추가 할 것을 제안했습니다 :) –

1

당신은 단순히이 작업을 수행 할 수 있습니다 : 테스트의 또 다른 예

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

편집 한

:

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("helloworld") 
w r o 
+0

테스트 케이스가 실제로 많이 보이지는 않지만 최소한 4 가지 항목이있는 테스트를 사용하는 것이 좋습니다. 'abxztu'' –

+1

덧글에 대한 Thx 닉, 더 복잡한 문자열을 사용하는 예제를 추가하여 내 대답을 편집했습니다. – Ashiro

1

내장 된 sorted을 사용하여 목록을 정렬 할 수 있습니다. sortedreverse 매개 변수 (부울 값)를 허용하므로 내림차순으로 목록을 정렬 할 수 있습니다.

sorted에 문자열을 전달할 수도 있으며 개별 문자를 목록으로 정렬합니다.

목록에서 세 번째, 두 번째 또는 네 번째로 큰 항목을 가져 오려면 내림차순으로 목록을 정렬 한 다음 해당 항목을 호출하십시오 (예 : 두 번째로 큰 가장 큰 항목에 대한 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) 
관련 문제