2016-10-25 36 views
-3

使用非庫python代碼,我如何返回偶數最長序列的索引和計數?Python中偶數的最長序列

a = [1, 3, 2, 6, 4, 1, 2, 2, 2, 8, 1] 

應該返回6和4,6是索引,4是計數。 我試過沒有運氣..

def evenSeq(list): 
    count=0 
    for i in list: 
     if list[i]%2 and list[i+1]%2==0: 
      count+=1 
    return count 
+1

這裏添加一些額外的信息。您的代碼中正在發生什麼不符合您的期望?你目前得到的輸入是什麼,你所提供的輸入不符合期望? – idjaw

+0

觀察:如果你碰到一個奇數,'count'會發生什麼? –

+0

@PatrickHaugh編輯 –

回答

0
a=[1,3,2,6,4,2,2,2,2,2,1,2,2,2,8,1] 
def evenSeq(a): 
    largest = 0 
    temp_largest = 0 
    location = 0 
    for count, value in enumerate(a): 
     if value % 2 == 0: 
      temp_largest += 1 
     else: 
      temp_largest = 0 
     if temp_largest >= largest: 
      largest = temp_largest 
      location = count + 1 - temp_largest #plus one cause enumerate returns the index and we are subbing from the current streak which needs to be offset by one 
    return location, largest 

print(evenSeq(a)) #returns 2 8 

不是最漂亮的解決方案,但它可以幫助教你這是怎麼回事和解決方案的基本邏輯。基本上,它會檢查數字是否爲偶數,並保持存儲在temp_largest中的當前連勝數。檢查temp_largest是否是當時最大的已知條紋,並從枚舉更新索引。

編輯基於評論:

for count, value in enumerate(a): 

這條線基本上穿過名單,投入value和值count當前索引。 enumerate()基本上會經歷通過它的任何東西,並返回一個從0開始的計數。例如見下文。

a=[1,3,2,6,4,2,2,2,2,2,1,2,2,2,8,1] 
for index, value in enumerate(a): 
    print('{} index and value is {}'.format(index,value)) 

打印出:

0 index and value is 1 
1 index and value is 3 
2 index and value is 2 
3 index and value is 6 
4 index and value is 4 
5 index and value is 2 
6 index and value is 2 
7 index and value is 2 
8 index and value is 2 
9 index and value is 2 
10 index and value is 1 
11 index and value is 2 
12 index and value is 2 
13 index and value is 2 
14 index and value is 8 
15 index and value is 1 
+0

「計數,枚舉(a)中的值」是做什麼的? –

+0

試試這個例子:'evenSeq([4,4,4,1,2,2,2,2])',它給出了錯誤的答案 –

+0

@FranciscoCouzo oops錯過了一個等號,感謝捕捉會更新。 – MooingRawr

1

這裏是一個可能的解決方案:

def even_seq(l): 
    best = (-1, -1) 
    start_i = 0 
    count = 0 
    for i, n in enumerate(l): 
     if n % 2 == 0: 
      count += 1 
      if count > best[1]: 
       best = (start_i, count) 
     else: 
      start_i = i + 1 
      count = 0 

    return best 
-1

我會嘗試這種方式:

def evenSeq(seq): 
    i = startindex = maxindex = maxcount = 0 

    while i < len(seq): 
     if seq[i]%2==0: 
      startindex = i 
      while i < len(seq) and seq[i]%2==0: 
       i+=1 
      if maxcount < i - startindex: 
       maxcount = i - startindex 
       maxindex = startindex    
     i+=1 

    return (maxindex, maxcount)  
+0

不起作用,您基於值而不是實際索引編制索引。 – MooingRawr

+0

您正在使用列表中的元素,就像它們是索引一樣。此外,不要影響建立在'列表' –

+0

感謝您的意見,我修正了我的解決方案的名稱。 –