2D 배열을 1D 배열로 변환하는 것을 평면화라고 합니다. 문제를 해결하는 방법에는 여러 가지가 있습니다.
이 튜토리얼에서 그 중 일부를 살펴볼 것입니다.
예를 보겠습니다.
입력
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
산출
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
목차
#1. 루프
문제를 해결하는 가장 일반적인 방법은 루프를 사용하는 것입니다. 대부분 이미 받으셨다고 생각합니다. 루프를 사용하여 문제를 해결하는 단계를 살펴보겠습니다.
- 더미 데이터로 목록 목록을 초기화하고 데이터로 이름을 지정합니다.
- 이제 flat_list라는 빈 목록을 초기화합니다.
- 데이터를 반복합니다.
- 현재 목록에서 모든 요소의 압축을 풉니다.
- 목록 추가 방법을 사용하여 flat_list에 추가하십시오.
- 결과를 인쇄하십시오.
아래 문제에 대한 코드를 참조하십시오.
# initializing the data and an empty list data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # iterating over the data for item in data: # appending elements to the flat_list flat_list += item # printing the resultantn flat_list print(flat_list)
연결 연산자 대신 다른 루프를 사용하여 flat_list에 하위 목록 요소를 추가할 수 있습니다. 루프 대신 목록 내포를 사용할 수도 있습니다.
둘 다 같은 작업을 수행합니다. 문제를 해결하는 다음 방법을 살펴보겠습니다.
#2. Itertools – 체인
itertools 내장 모듈에서 chain이라는 메소드를 사용할 것입니다.
메서드 체인은 각 하위 목록을 반복하고 하위 목록이 없을 때까지 요소를 반환합니다. 그것은 목록으로 변환해야 하는 iterable을 반환합니다.
문제 해결과 관련된 단계를 살펴보겠습니다.
- 더미 데이터로 목록 목록을 초기화하고 데이터로 이름을 지정합니다.
- itertools.chain(*data)를 사용하여 평평한 iterable을 가져옵니다.
- 결과 iterable을 목록으로 변환합니다.
- 병합 목록을 인쇄합니다.
아래 스 니펫의 코드를 살펴볼 수 있습니다.
# importing the module import itertools # initializing the data data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # flattening the list and storing the result flat_list = itertools.chain(*data) # converting iterable to list and printing print(list(flat_list))
#삼. 다단계 목록 평면화
목록 목록을 병합하는 방법을 살펴보았습니다. 목록을 평면화하기 위해 논의한 위의 방법은 다단계 목록에는 작동하지 않습니다. 예를 보겠습니다.
입력
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
산출
[1, 2, 3, 4, 5, 6, 7, 8, 9]
프로그램 이전에 목록의 깊이를 모르기 때문에 문제를 해결하기 위해 재귀를 사용해야 합니다.
- 예제와 같이 데이터를 초기화하고 데이터로 이름을 지정합니다.
- flat_list라는 빈 목록을 초기화합니다.
- flatten_list라는 함수를 작성하십시오.
- 주어진 목록의 요소를 반복합니다.
- 요소가 목록이면 동일한 함수를 재귀적으로 다시 호출합니다.
- 요소가 목록이 아니면 요소를 flat_list에 추가합니다.
- 데이터로 함수를 호출합니다.
- 이 함수는 flat_list 목록의 모든 요소를 채웁니다.
- flat_list를 인쇄하여 출력을 확인하십시오.
휴! 코딩 단계가 많습니다. 괜찮아요. 위의 문장을 코드로 변환하는 데 몇 분도 걸리지 않습니다.
# initializing the data and empty list data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # function def flatten_list(data): # iterating over the data for element in data: # checking for list if type(element) == list: # calling the same function with current element as new argument flatten_list(element) else: flat_list.append(element) # flattening the given list flatten_list(data) # printing the flat_list print(flat_list)
기존 목록을 변환하지 않았다는 점을 기억하십시오. 대신 주어진 목록 요소로 새 목록을 만들었습니다.
결론
튜토리얼을 즐겼기를 바랍니다. Python에서 목록을 평면화하는 다른 많은 방법이 있을 수 있지만 위의 방법이 아마도 가장 쉬운 방법이라고 느꼈습니다.
행복한 코딩 🙂