2014-03-03 79 views
2

我想計算一個數字I輸入的偶數位的最大序列,找到它的索引和偶數位本身的序列。計算偶數的最大序列

我纔剛剛開始學習編程,所以我只能在草圖階段,這是我認爲的:

Split the number to a list of single digits. 

Apply modulo 2 to all digits. 

Count where is the biggest sequence of zeros. 

Take its index. 

From the index extract the original from the starting number. 

我的問題是現在str.split()函數,什麼它的確是去除分割字符,我還必須指定所有10位數字來分割每個數字。

是否有另一個功能可以滿足我第一步所需的功能,或者我需要考慮一下嗎?

注意:我使用python 3.2。

回答

3
nums = str(12344444442) 
from itertools import groupby as gby 
if all (int(num) % 2 for num in nums): 
    print("All are Odd numbers") 
else: 
    m_list=max((list(g) for n,g in gby(nums,key=lambda x:int(x)%2) if not n),key=len) 
    # ['4', '4', '4', '4', '4', '4', '4', '2'] Longest even sequence 
    print(nums.index("".join(m_list))) 
    # 3 Starting index 
+1

這將打印具有相同奇偶性的最長數字序列,這不一定是偶數。 (只需在生成器表達式中添加「if not num」。) –

+0

@SvenMarnach請立即檢查。我修好了它。感謝您指出:) – thefourtheye

1

我想你要找的是列表()

nums = 1423341 
list(str(nums)) 
=> ['1', '4', '2', '3', '3', '4', '1'] 

既然你說你是剛剛起步,採用的基本方法,只是做你正在嘗試做的可能是比使用lambda和什麼更好。

+0

您的意思是... list(str(nums))? – jcfollower

+0

當然,我從錯誤的代碼中複製並粘貼。感謝您的支持。 – hlee

+0

謝謝,是的,這些lambdas有點高級。 – GinKin

2

我不能評論thefourtheye的代碼,但不象NUMS工作:

nums = str(155555555344444442) 

或者:

nums = str(155555555) 

我發現重新使用一個簡單的方法。 它可以返回序列的所有標識符。

import re 
nums = str(22554442266) 
groups = sorted([(len(n.group(0)), n.group(0), n.span(0)[0]) for n in re.finditer('(\d)\\1+', nums)], reverse=True) 

results = [(groups[0][1], groups[0][2])] # Sequence, index 
for n in groups[1:] : 
    if n[0] != groups[0][0] : 
     break 
    results.append((n[1], n[2])) 
print(results) # => [('444', 4)] 
# nums = str(1112255566622111) => [('666', 8), ('555', 5), ('111', 13), ('111', 0)] 
# nums = str(1112222333) => [('2222', 3)]