고급 파이썬 개발 과정
챕터
>
레벨
고급 목록
리스트 내포
이번 챕터에서는 Python에서 리스트를 최적화하고 구분하며, 표와 매우 유사한 대형 다차원 리스트(행렬) 생성과 같이 리스트를 활용하는 새로운 방법들을 탐구할 것입니다.
이 레벨에서는 리스트 컴프리헨션(List Comprehensions)을 다룰 것이며, 이는 다른 리스트로부터 특정 구성 요소들만 선택하여 생성할 수 있는 리스트입니다. 이 작업은 리스트를 수동으로 입력하거나 복잡한 자동화 방법을 고안할 필요 없이, 매우 직관적인 한 줄의 코드로 수행됩니다.

목표
리스트 내포(list comprehensions)를 사용하여 식료품 저장실에 있는 모든 뿌리 채소들을 가져와 정리한 후 올바른 위치에 보관하세요.
식료품 저장실에는 분류해야 할 뿌리 채소가 가득 들어 있는 여러 개의 자루가 있습니다. 이 채소들은 potatoes, onions, garlic로 구성되어 있으며, 상태가 좋지 않은 채소들도 섞여 있을 가능성이 있습니다. 상태가 좋은 채소들을 꺼내어 제자리에 있는 상자에 보관하세요.
이를 위해 각 자루 안에 무엇이 들어 있는지 확인해야 합니다. 각 자루의 정보를 담고 있는 세(3) 개의 리스트 상수가 있으며, 이들은 각각 left_sack, middle_sack, right_sack이라는 이름을 가지고 있습니다. 이 리스트 상수들은 이름에 명시된 위치에 있는 자루에 대응됩니다.
각 자루 앞에 있는 빛나는 X 표시까지 걸어가서 speak() 함수를 사용해 상수로 자루의 내용을 확인하세요. 예를 들어: player.speak(left_sack) 처럼 사용합니다. 각 자루의 내용을 확인한 후, 이름에 "Bad", "Spoiled" 또는 "Rotten"이 포함된 제거해야 할 항목들을 식별하세요.
섭취하기에 좋은 항목들만 포함하는 새로운 리스트를 만들어야 합니다. 이를 수동으로 할 수도 있지만 시간이 많이 걸리고 혼란스러울 수 있습니다. 이를 더 효과적으로 수행하기 위해 한 리스트에서 다른 리스트를 생성할 수 있는데, 이것을 리스트 내포(List Comprehension) 라고 합니다.
세(3) 개의 리스트 상수인 left_sack, middle_sack, right_sack로부터, 자루 내에 원치 않는 항목이 포함되지 않은 potatoes, onions, garlic 라는 이름의 새로운 리스트 세 개를 만드세요. 리스트 내포 를 사용하면 많은 코드를 작성하지 않고도 새로운 리스트를 만들 수 있습니다. 예를 들어:
# Original list sack = ["Potatoes", "Sweet Potatoes", "Spoiled Potatoes" ] # List Comprehension potatoes = [x for x in sack if not "Spoiled" in x] # This will create a list named potatoes with: # ["Potatoes", "Sweet Potatoes"]
위의 예제에서, sack 리스트로부터 생성된 potatoes 리스트에는 ["Potatoes", "Sweet Potatoes"]만 포함되며, "Spoiled Potatoes"는 제외됩니다. 이는 리스트를 순회하기 위해 x를 인덱스로 사용하고, for / in 구문을 통해 "Spoiled"라는 단어가 포함된 원치 않는 요소를 식별 및 제외하는 자체 포함형 for 루프를 생성함으로써 달성됩니다.
다시 정리하면, speak() 함수를 사용하여 리스트 상수에 "Bad", "Spoiled" 또는 "Rotten" 이 포함되어 있는지 확인한 후, 각 리스트에서 원치 않는 요소들을 제거하면서 리스트 내포 를 사용해 potatoes, onions, garlic 리스트를 만드세요.
이 리스트들이 만들어지면, 채소 표지판이 있는 상자 앞의 세(3) 개의 황금 X 표시로 걸어가 place() 함수를 사용하여 리스트들을 해당 상자에 배치하여 레벨을 완료하세요. 위치는 표지판에 따라 정해지며, 왼쪽 상자에 onions, 가운데 상자에 potatoes, 왼쪽 상자에 garlic이 있습니다.