[python] 목록을 더 작은 목록으로 나누기 (반으로 분할)

파이썬 목록을 쉽게 반으로 나눌 수있는 방법을 찾고 있습니다.

그래서 배열이 있다면 :

A = [0,1,2,3,4,5]

나는 얻을 수있을 것입니다 :

B = [0,1,2]

C = [3,4,5]



답변

A = [1,2,3,4,5,6]
B = A[:len(A)//2]
C = A[len(A)//2:]

기능을 원한다면 :

def split_list(a_list):
    half = len(a_list)//2
    return a_list[:half], a_list[half:]

A = [1,2,3,4,5,6]
B, C = split_list(A)


답변

좀 더 일반적인 해결책 ( ‘반으로 나누지 않고 원하는 부분 수를 지정할 수 있습니다) :

편집 : 홀수 목록 길이를 처리하도록 게시물이 업데이트되었습니다.

EDIT2 : Brians 유익한 의견에 따라 게시물을 다시 업데이트하십시오.

def split_list(alist, wanted_parts=1):
    length = len(alist)
    return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts]
             for i in range(wanted_parts) ]

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

print split_list(A, wanted_parts=1)
print split_list(A, wanted_parts=2)
print split_list(A, wanted_parts=8)


답변

f = lambda A, n=3: [A[i:i+n] for i in range(0, len(A), n)]
f(A)

n -사전 정의 된 길이의 결과 배열


답변

def split(arr, size):
     arrs = []
     while len(arr) > size:
         pice = arr[:size]
         arrs.append(pice)
         arr   = arr[size:]
     arrs.append(arr)
     return arrs

테스트:

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
print(split(x, 5))

결과:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13]]


답변

주문에 신경 쓰지 않으면 …

def split(list):
    return list[::2], list[1::2]

list[::2]0 번째 요소부터 시작하여 목록의 모든 두 번째 요소를 가져옵니다.
list[1::2]목록에서 첫 번째 요소부터 시작하여 매 초마다 요소를 가져옵니다.


답변

B,C=A[:len(A)/2],A[len(A)/2:]


답변

다음은 일반적인 해결책입니다. arr을 카운트 부분으로 나눕니다.

def split(arr, count):
     return [arr[i::count] for i in range(count)]