2011-10-31 2 views
0

목록에서 양수의 가장 긴 시퀀스를 말해주기 위해이 함수가 필요합니다.자이 썬에서 max() 함수는 어떻게 작동합니까?

def longestSequencePos(nums): 
    index = 0 
    list = [] 
    integ = 0 

    for obj in nums: 
     if obj > 0: 
     index = index +1 
     else: 
     list.append(index) 
     index = 0 
    return max(list) 

목록에는 긍정의 순서의 길이가 모두 포함되어야하지만 최대 기능은 작동하지 않습니다.

+3

어떤 방식으로 작동하지 않습니까? –

+1

'list'를 변수 이름으로 사용하지 마십시오. –

+0

디버깅 :'print list' 또는 다소'print better_name_than_list' –

답변

0

문제는 당신이 nums가 소진되는리스트에 인덱스를 추가하지 않는, 그래서 목록이 긴 순서로 끝나는 경우, 올바른 값을 반환하지 않을 수 있습니다 :

def longestSequencePos(nums): 
    index = 0 
    list = [] 
    integ = 0 

    for obj in nums: 
     if obj > 0: 
     index = index +1 
     else: 
     list.append(index) 
     index = 0 
    list.append(index) 
    return max(list) 

이를 고정 된 버전 날 위해 정상적인 파이썬 인터프리터에서 작동합니다. 나는 자이 썬에서 그것을 시도하지 않았다.

2

당신은 루프를 종료하고 nums는 양의 정수를 가지고, 당신은 같은 것을 수행해야합니다 때 목록에 아무것도 추가하지 않는 다음 경우 인덱스의 마지막 수를 추가합니다

def longestSequencePos(nums): 
    index = 0 
    list = [] 
    integ = 0 

    for obj in nums: 
     if obj > 0: 
      index = index +1 
     else: 
      list.append(index) 
      index = 0 

    list.append(index) 

    return max(list) 

을 목록은 루프의 끝에서 비어 있습니다.

또한, 당신은 전화 한 당신의 list, 잘 do not do

+0

인덱스가 비어 있지 않은 경우에도 루프 끝의 목록에 인덱스를 추가해야합니다. 그렇지 않으면 가장 긴 시퀀스가 ​​끝에 오는 경우를 놓치게됩니다. – Colin

+0

매우 사실, 그것을 잡아 주셔서 감사합니다. – Serdalis

1

과 같이 필요가 없습니다 조심하는 뭔가 문제가 아니지만, 실제로 list에 대한 생성자, list, 이 작업을 수행 할 목록 :

count = maxc = 0 
for obj in nums: 
    if obj > 0: 
     count += 1 
    else: 
     maxc = max(count, maxc) 
     count = 0 
maxc = max(count, maxc) 
관련 문제