[Python] 파이썬 리스트를 특정 크기의 리스트로 분할하기

리스트를 특정 크기의 리스트로 분할하기

아래의 예제에서는 크기가 9인 리스트를 4개씩 나누기 한 것 (n=4)

 

코드

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# How many elements each list should have
n = 4 

# using list comprehension
result1 = [my_list[i * n:(i + 1) * n] for i in range((len(my_list) - 1 + n) // n )] 

print (result1)

결과

 

List Comprehensin에 대한 설명

result1 = [my_list[i*n:(i+1)*n] for i in range((len(my_list) - 1 + n) // n )] 

 

 

1) 먼저 몇 개의 리스트가 생기는지 구해야 한다.

 

9개를 4개씩 나누면 각각 "4개, 4개, 2개"가 들어가는 세 개의 리스트로 나누어진다. 

 

이것은 ((9-1) // 4) +1과 같음.  ( 9-1 한 것을 4로 나눈 몫에다 1을 더함) 

(len(my_list)-1 // n) + 1 => (len(my_list) - 1 + n) // n

 

len(my_list) - 1 + n) // n 이 3이므로

 

result1 = [my_list[i*n:(i+1)*n] for i in range(3)] 이 된다.

따라서 3개의 리스트가 들어있는 리스트가 결과물로 나오게 된다.

 

 

2) 1에서 구한 리스트 숫자로 리스트를 Slicing 한다

 

n=4이므로 

result1 =  [my_list[0:4],my_list[4:8],my_list[8:12]]가 되고, 

마지막 my_list[8:12] 의 경우에는 my_list의 크기 이상을 인덱싱 하고 있지만 반환값이 없어 [9]가 된다.

 

따라서 결과는 다음과 같다

 

[[1, 2, 3, 4], [5, 6, 7, 8], [9]]

 

 

 

 

후기

연필 들고 직접 해보는 건 건 쉬운데, 이걸 파이썬에서 List Comprehension으로 바꾸는 건 어려운 일이다.

 

댓글

Designed by JB FACTORY