2010-03-28 3 views
4

저는 파이썬에 익숙하지 않아 목록의 이해력을 더 잘 알기 위해 노력하고 있습니다.
목록을 작성하지 않으므로 목록 이해력이 내가 찾는 단어인지 확실하지 않습니다. 그러나 나는 비슷한 것을하고있다.이 간단한 목록 이해 방법은 무엇입니까?

이것은 내가 뭘하려고 오전입니다 :

내가 번호 목록을 가지고, 길이있는 세 가지로 나눌 수있다.

그럼 내가 가지고있는 것 nums = [1, 2, 3, 4, 5, 6] 목록을 반복하고 각 그룹의 합계를 3 자리수로 늘리고 싶습니다. 현재 내가이 일을하고있다 :

for i in range(0, len(nums), 3): 
    nsum = a + b + c for a, b, c in nums[i:i+3] 
    print(nsum) 

나는이 잘못이지만,이 할 수있는 방법이 있나요 알아? 나는 아마 아주 간단한 것을 간과 한 것이 확실합니다 ...하지만 나는 이것을 할 다른 방법을 생각할 수 없습니다.

+0

은 그래서 당신은'+ 3' 1 + 2, 싶어'4 + 5 + 6' 또는 + 3''1 + 2 + 4''2 + 3,'3 + 4 + 5', ...? –

+0

1 + 2 + 3, 4 + 5 + 6 --- –

답변

6

sum(iterable[, start]) 내장형을 참조하고 슬라이스에 사용하십시오.

Sums start and the items of an iterable from left to right and returns the total. start defaults to 0. The iterable‘s items are normally numbers, and are not allowed to be strings.

>>> nums 
[1, 2, 3, 4, 5, 6] 
>>> [sum(nums[i:i+3]) for i in range(0, len(nums),3)] 
[6, 15] 
>>> 
+0

+1 내 생각은 정확하지만 더 빠르며 답은 좀 더 정교합니다. –

+0

와우는 이것에 대해 전혀 생각해 본 적이 없었습니다. –

+0

실제로이 오류가 발생합니다. 'TypeError : 시퀀스 인덱스는'slice '가 아닌 정수 여야합니다. ' –

4
import itertools 

nums = [1, 2, 3, 4, 5, 6] 

print [a + b + c for a, b, c in itertools.izip(*[iter(nums)] * 3)] 
+0

끝내 주셔서 감사합니다! –

+0

솔루션은'sum()'및 하위 목록 (실행 시간, 메모리)에 비해 어떤 이점이 있습니까? 나는 단지 호기심이 많다.) –

+0

@Felix :별로, 아니. –

1
nums = [1, 2, 3, 4, 5, 6] 
map(sum, itertools.izip(*[iter(nums)]*3))