2012-07-11 4 views
0

나는 둘러 보았지만 내 코드가 실패한 이유와 올바른 방법을 찾을 수 없었다. 나는 새로운 (3 일) 코딩, 그래서 내 noobishness 용서.파이썬에서 인덱스의 슬라이딩 윈도우를 합친 것

정수 목록으로 시작하고 본질적으로 새 목록의 첫 번째 색인에 값 = 원래 목록의 처음 10 개 값 (0-10)의 합계가있는 새 목록 또는 업데이트 된 목록을 만들고 싶습니다. 새 목록의 두 번째 색인은 값 = 원래 목록의 색인 값 (1-11)의 합계입니다.

문제는 모든 것이 잘못 추가되어 패턴을 파악할 수 없다는 것입니다.

여기에 내가 가진 무엇 :

def sum_range(filename, grouping = 10): 
    """sums up the ss values for 'groupings' numbers of indices. 
    Shows ALL results, regardless of how high or low strandedness is""" 

    sslist = ssc_only(filename) 
    # "ssc_only(filename)" takes my input and returns it as a list of int, 
    # which I want to use for this function 

    sslist = [sum(sslist[i:i+grouping]) for i in sslist] 

    return sslist 

답변

3

난 당신이 아마 for i in range(len(sslist))을 (당신은 메모리 사용량이 염려되는 경우 파이썬 2 xrange 대신 range를 사용) 할 생각합니다.

lstlen=len(sslist) 
sslist = [sum(sslist[i:min(i+grouping,lstlen)]) for i in range(lstlen)] 

당신은 인덱스 물론

리스트를 대신리스트를 항목를 루핑, 마지막 10 개 요소 미만 10 개 요소의 합이 될 것입니다. 당신이 그 요소들로 무엇을하고 싶은지 모르겠으므로, 나는 당신이 그 요소들로 무엇을하고 싶은지 알아 내기 위해 당신에게 맡길 것입니다.

+0

대단히 감사합니다. 이것은 내 프로그램에서 효과가 있었고, 또한 내가 중요한 것을 가르쳐 주었다. 그것은 위대한 작품이며, 이것을 위해 무엇을 사용하고 있는지, 결국 몇 가지 요소를 잃어 버리는 것은 중요하지 않습니다. 베스트! –

0

합산이 옳다고 생각하지 마십시오. 그룹을 10 개 만들면 원본 목록보다 10 개 샘플이 적습니다. 아래의 식에서는 len(r) - 10입니다.

>>> r = range(20) 
>>> r 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> [sum(r[n:10+n]) for n in range(len(r)-10)] 
[45, 55, 65, 75, 85, 95, 105, 115, 125, 135] 
+0

감사합니다. 나는 summing이 잘못되어 len() 함수를 사용해야했습니다. –

관련 문제