Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 리스트 컴프리헨션으로 배열에서 0과 1을 분리하는 방법

리스트 컴프리헨션(List Comprehension)은 파이썬에서 가장 널리 사용되는 기법 중 하나입니다. 이 글에서는 이 기법을 활용해 0과 1이 무작위 순서로 섞여 있는 배열에서 0은 왼쪽에, 1은 오른쪽에 배치하도록 분리하는 방법을 알아봅니다.

핵심 아이디어는 간단합니다. 배열을 한 번 순회하면서 값이 0인 요소만 모은 리스트와 값이 1인 요소만 모은 리스트, 총 두 개의 리스트를 만든 뒤, 이 두 리스트를 연결(concatenate)하면 원하는 결과를 얻을 수 있습니다.

예제

입력 :: a=[0,1,1,0,0,1]
출력 :: [0,0,0,1,1,1]

알고리즘

seg0s1s(A)
/* A는 사용자가 입력한 배열이며, A의 요소는 0과 1의 조합이어야 합니다 */
1단계: 먼저 배열 전체를 순회합니다.
2단계: 배열의 각 요소를 검사합니다. 요소가 0이면 왼쪽에, 1이면 오른쪽에 위치시킵니다.
3단계: 두 개의 리스트를 연결하여 최종 결과를 만듭니다.

예제 코드

#  배열 리스트에서 0과 1을 분리하는 함수
def seg0s1s(A):
   n = ([i for i in A if i==0] + [i for i in A if i==1])
   print(n)

# 드라이버 프로그램
if __name__ == "__main__":
   A=list()
   n=int(input("배열의 크기를 입력하세요 ::"))
   print("숫자를 입력하세요 ::")
   for i in range(int(n)):
      k=int(input(""))
      A.append(int(k))
   print("새로운 배열 리스트 ::")    
   seg0s1s(A)

실행 결과

배열의 크기를 입력하세요 ::6
숫자를 입력하세요 ::
1
0
0
1
1
0
새로운 배열 리스트 ::
[0, 0, 0, 1, 1, 1]

동작 원리 살펴보기

위 코드에서 핵심은 다음 한 줄입니다.

n = ([i for i in A if i==0] + [i for i in A if i==1])

첫 번째 리스트 컴프리헨션 [i for i in A if i==0]은 배열 A에서 값이 0인 요소만 순서대로 추출하고, 두 번째 [i for i in A if i==1]은 값이 1인 요소만 추출합니다. 이 둘을 + 연산자로 연결하면 0들이 앞쪽에, 1들이 뒤쪽에 정렬된 새로운 리스트가 완성됩니다.

이 방식은 배열을 두 번 순회하므로 시간 복잡도는 O(n)이며, 추가적인 정렬 함수 없이도 직관적으로 문제를 해결할 수 있다는 장점이 있습니다.