Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python Flatten List:방법 가이드

목록 병합은 목록에서 차원을 제거하는 프로세스를 의미합니다. 차원은 목록에서 항목을 찾는 데 필요한 추가 좌표를 나타냅니다. 목록 이해, 중첩 for 루프 또는 itertools.chain() 메서드를 사용하여 Python 목록을 평면화할 수 있습니다.

Python 목록에는 여러 차원이 포함될 수 있습니다. 이것은 목록 안에 목록이 있음을 의미합니다. '중첩 목록'이라고도 하는 이러한 목록은 일반 목록으로 다시 변환할 수 있습니다.

즉, 목록 내의 목록에서 모든 값을 단일 목록으로 이동할 수 있습니다. 목록 목록을 목록으로 바꾸는 것을 "목록 병합"이라고 합니다.

Python 병합 목록

Python 목록을 병합하는 세 가지 방법이 있습니다.

  • 목록 이해 사용.
  • 중첩 for 루프 사용
  • itertools.chain() 메서드 사용

이 가이드에서는 목록 이해, for 루프 및 itertools.chain()을 사용하여 목록을 평면화하는 방법에 대해 설명합니다. 방법. 자체 프로그램에서 목록 병합을 시작할 수 있도록 두 가지 예를 살펴봅니다.

Python:목록 이해를 사용하여 목록 병합

Python 목록 이해는 기존 목록의 내용을 기반으로 목록을 정의합니다. 내포 내에서 조건이나 변경 사항을 지정하여 새 목록에 들어가는 각 요소를 사용자 정의할 수 있습니다.

Comprehension은 for 루프를 사용하여 목록을 반복하고 새 목록을 생성하기 위한 구문 설탕입니다. 이는 for 루프와 기본적으로 동일한 방식으로 작동하지만 다른 구문을 사용한다는 것을 의미합니다.

다음은 목록 이해를 위한 구문입니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

numbers = [1, 2, 3]

new_numbers = [number * 2 for number in numbers]

이 이해는 "숫자" 목록의 각 숫자에 2를 곱합니다.

평평한 목록:목록 이해의 예

레스토랑에서 사용할 수 있는 다양한 샌드위치 속 재료가 포함된 목록이 있습니다. 현재 목록 목록은 다음과 같습니다.

foods = [
	["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"],
	["Cheese", "Egg"],
	["Ham", "Bacon", "Chicken Club", "Tuna"]
]

첫 번째 목록에는 비건 샌드위치 충전재가 포함되어 있습니다. 두 번째 목록에는 채식 샌드위치 충전물이 포함되어 있습니다. 세 번째 목록에는 고기가 들어 있는 모든 샌드위치 속이 포함되어 있습니다.

이 목록을 단일 식품 목록으로 변경하려고 합니다. 2차원보다 1차원이 있는 목록으로 작업하는 것이 더 쉽습니다. 이 목록에 둘 이상의 차원이 있을 필요는 없습니다. 목록에서 두 번째 차원을 제거하기 위해 목록 이해를 사용할 수 있습니다.

new_foods = [food for sublist in foods for food in sublist]
print(new_foods)

이 목록 이해는 "foods" Python 변수의 모든 목록을 반복합니다. 그런 다음 각 값이 기본 목록에 추가됩니다. 목록이 생성되면 콘솔에 출력합니다.

코드를 작성하고 어떤 일이 발생하는지 살펴보겠습니다.

['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']

목록 목록이 플랫 목록으로 성공적으로 변환되었습니다. 이제 모든 재료가 3개가 아닌 하나의 목록에 나타납니다.

Python:중첩 For 루프를 사용하여 목록 병합

또한 중첩된 Python for 루프를 사용하여 동일한 결과를 얻습니다. "중첩 for 루프"는 "for 루프 내의 for 루프"를 말하는 또 다른 방법입니다. 목록 이해는 다음 for 루프를 나타내는 또 다른 방법입니다.

new_foods = []
for sublist in foods:
	for food in sublist:
		new_foods.append(food)

print(new_foods)

우리 코드는 원래 목록 목록의 각 목록에 있는 각 목록 항목을 반복하기 위해 두 개의 for 루프를 사용합니다. 코드를 실행해 보겠습니다.

['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']

우리 프로그램은 목록 이해와 동일한 결과를 반환합니다. 대부분의 경우 목록 이해가 for 루프보다 더 나은 솔루션입니다. 목록 이해는 더 짧고 이 경우 중첩 for 루프보다 읽기 쉽습니다.

Python:Itertools를 사용하여 목록 병합

Itertools는 Python 표준 라이브러리의 모듈입니다. 이 모듈은 다양한 메서드를 제공하므로 반복 가능한 개체 및 생성기로 쉽게 작업할 수 있습니다.

우리의 목적을 위해 chain()만 참조합니다. 방법. 이 메서드는 목록 목록을 수락하고 평면화된 목록을 반환합니다.

Python import 문을 사용하여 itertools 모듈을 코드로 가져와 시작합니다.

import itertools

다음으로 목록 목록을 정의하고 chain()을 사용합니다. 목록을 병합하는 방법:

foods = [
	["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"],
	["Cheese", "Egg"],
	["Ham", "Bacon", "Chicken Club", "Tuna"]
]

new_foods = itertools.chain(*foods)

코드에서 * 기호를 사용하여 목록의 압축을 풉니다. 이렇게 하면 목록이 chain()에 의해 구문 분석될 수 있는 함수 인수로 변환됩니다. 방법.

체인() 메소드는 itertools.chain 객체를 반환합니다. 평면화된 목록을 보려면 이 개체를 목록으로 변환해야 합니다. list()를 사용하여 이 작업을 수행합니다. 방법:

print(list(new_foods))

코드를 실행해 보겠습니다.

['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']

코드가 목록을 단순화했습니다.

itertools는 목록을 병합하는 효과적인 방법이지만 우리가 논의한 마지막 두 가지 접근 방식보다 더 발전된 것입니다.

이는 새로운 종속성을 도입하는 itertools를 코드로 가져와야 하기 때문입니다. 또한 chain() 방법은 이해하기 어려울 수 있는 포장을 푸는 것을 포함합니다.

결론

목록 이해, 중첩 for 루프 및 itertools.chain() 메서드를 사용하여 Python 목록을 평면화할 수 있습니다. 목록 이해는 가장 "파이썬적인" 방법이므로 대부분의 경우에 선호됩니다.

중첩 for 루프는 효과적이지만 목록 이해보다 더 많은 코드 줄을 소비합니다. itertools.chain() 메서드도 비슷하게 효과적이지만 초보자가 이해하기 어려울 수 있습니다.

Python이 목록을 병합하는 데 필요한 모든 도구를 제공하면 일반적으로 새 라이브러리(itertools)를 가져올 필요가 없습니다.

파이썬에 대해 더 알고 싶으세요? 전체 Python 학습 방법 가이드를 확인하세요. 전문적인 학습 팁과 학습할 수 있는 최고의 코스 및 도서 목록을 찾을 수 있습니다.