2013-05-01 2 views
11

목록에 일련의 숫자가 있습니다. 개별적인 시퀀스 (단일 값 포함)를 얻으려면 우아한 솔루션, 바람직하게는 목록 이해를 찾고 있습니다. 나는이 작은 문제를 해결했다. 그러나 그것은 매우 pythonic하지 않다.파이썬 - 목록 이해력이있는 증분 번호가 매겨진 시퀀스 찾기

input = [1, 2, 3, 4, 8, 10, 11, 12, 17] 

원하는 출력이어야 :

다음은 입력 시퀀스를 정의

output = [ 
    [1, 2, 3, 4], 
    [8], 
    [10, 11, 12], 
    [17], 
] 
+0

'[1,2,2,3,5]'와 같이 두 개의 동일한 번호가 연속적으로 나타날 수 있습니까? – TerryA

+0

아니요, 모든 숫자는 고유하며 n + 1은 항상 n보다 큽니다. – skovsgaard

답변

12
>>> from itertools import groupby, count 
>>> nums = [1, 2, 3, 4, 8, 10, 11, 12, 17] 
>>> [list(g) for k, g in groupby(nums, key=lambda n, c=count(): n - next(c))] 
[[1, 2, 3, 4], [8], [10, 11, 12], [17]] 
+1

미래를 볼 수 있습니까? 그건 단지 ... 놀라운 일입니다. – TerryA

+0

@Haidro 내 것이 아니에요 : P – jamylak

+1

그것은 작동합니다 -하지만 그것은 정말로 자기 설명하는 코드가 아닙니다. – Howard

8

파이썬 간단 간단 코드 수단을, 그리고 하나의 라이너.

def runs(seq): 
    result = [] 
    for s in seq: 
     if not result or s != result[-1][-1] + 1: 
      # Start a new run if we can't continue the previous one. 
      result.append([]) 
     result[-1].append(s) 
    return result 

print runs([1, 2, 3, 4, 8, 10, 11, 12, 17]) 
관련 문제