Python 3에서 목록 이해하기

소개

A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ].

리스트는 많은 관련 값들과 작업할 때 사용하기에 훌륭합니다. 이들은 함께 속하는 데이터를 함께 유지하고, 코드를 간결하게 유지하며, 여러 값을 한꺼번에 동시에 동일한 방법과 작업을 수행할 수 있도록 해줍니다.

파이썬 리스트와 다른 종류의 컬렉션인 데이터 구조를 생각할 때, 컴퓨터에 있는 다양한 컬렉션을 고려하는 것이 유용합니다: 파일 모음, 노래 플레이리스트, 브라우저 즐겨찾기, 이메일, 스트리밍 서비스에서 접근할 수 있는 동영상 컬렉션 등.

필수 요구 사항

컴퓨터나 서버에 Python 3가 설치되어 있어야 합니다. 프로그래밍 환경이 설정되어 있지 않은 경우, 사용 중인 운영 체제 (Ubuntu, CentOS, Debian 등)에 적합한 로컬 프로그래밍 환경 또는 서버의 프로그래밍 환경을 설치하고 설정하는 가이드를 참조할 수 있습니다.

문자열 목록

시작하려면, 문자열 데이터 유형의 항목을 포함하는 목록을 만들어 보겠습니다:

정보: 이 자습서의 예제 코드를 따라하려면 로컬 시스템에서 Python 대화형 셸을 열고 python3 명령을 실행하세요. 그런 다음 >>> 프롬프트 뒤에 예제를 추가하거나 복사하여 붙여넣을 수 있습니다.

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

목록을 출력하면 생성한 목록과 정확히 같은 출력이 나옵니다:

print(sea_creatures)
Output
['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

목록의 각 항목은 순서가 있는 요소로, 색인을 통해 개별적으로 호출할 수 있습니다. 목록은 작은 부분으로 구성된 복합 데이터 유형이며, 값이 추가되거나 제거되거나 변경될 수 있어 매우 유연합니다. 많은 값이나 값 반복을 저장하고 해당 값을 쉽게 수정하려면 목록 데이터 유형을 사용하는 것이 좋습니다.

이 자습서에서는 Python에서 목록을 처리하는 몇 가지 방법을 살펴보겠습니다.

목록 색인화

목록의 각 항목은 정수 값인 색인 번호에 해당하며, 색인 번호는 0부터 시작합니다.

목록 sea_creatures의 색인 분해는 다음과 같습니다:

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
0 1 2 3 4

첫 번째 항목, 문자열 'shark'은 인덱스 0에서 시작하며, 리스트는 항목 'anemone'으로 인덱스 4에서 끝납니다.

파이썬 리스트의 각 항목에는 해당하는 인덱스 번호가 있으므로, 다른 순차적 데이터 유형과 마찬가지로 리스트를 액세스하고 조작할 수 있습니다.

이제 리스트의 각 항목을 해당하는 인덱스 번호를 참조하여 호출할 수 있습니다:

print(sea_creatures[1])
Output
cuttlefish

이 리스트의 인덱스 번호는 위의 표에 표시된대로 0부터 4까지 범위에 있습니다. 따라서 개별 항목을 호출하려면 다음과 같이 인덱스 번호를 참조해야 합니다:

sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'

리스트 sea_creatures를 4보다 큰 인덱스 번호로 호출하면 범위를 벗어나 유효하지 않습니다:

print(sea_creatures[18])
Output
IndexError: list index out of range

양수 인덱스 번호 외에도 리스트에서 항목을 음수 인덱스 번호로 액세스할 수 있습니다. 이는 리스트 끝부터 역으로 세어 -1에서 시작합니다. 이는 리스트가 길고 리스트의 끝쪽에 항목을 정확하게 지정하려는 경우 특히 유용합니다.

동일한 리스트 sea_creatures의 음수 인덱스 분해는 다음과 같습니다:

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
-5 -4 -3 -2 -1

따라서 음수 인덱스 번호를 사용하여 항목 'squid'를 출력하려면 다음과 같이 할 수 있습니다:

print(sea_creatures[-3])
Output
squid

문자열 항목을 + 연산자를 사용하여 다른 문자열과 연결할 수 있습니다:

print('Sammy is a ' + sea_creatures[0])
Output
Sammy is a shark

우리는 문자열 항목을 색인 번호 0에 있는 문자열 'Sammy is a '와 연결할 수 있었습니다. 우리는 또한 + 연산자를 사용하여 2개 이상의 목록을 연결할 수 있습니다.

목록 내의 항목에 해당하는 색인 번호를 사용하여 목록의 각 항목에 접근하고 해당 항목들을 개별적으로 처리할 수 있습니다.

목록 내의 항목 수정하기

우리는 목록 내의 항목을 변경하기 위해 색인 번호를 다른 값으로 설정하여 사용할 수 있습니다. 이를 통해 목록을 수정하고 업데이트하는 항목들을 제어할 수 있습니다.

만약 우리가 색인 번호 1의 항목의 문자열 값을 'cuttlefish'에서 'octopus'로 변경하려면 다음과 같이 할 수 있습니다:

sea_creatures[1] = 'octopus'

이제 sea_creatures를 출력할 때 목록이 다를 것입니다:

print(sea_creatures)
Output
['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']

우리는 음수 색인 번호를 사용하여 항목의 값을 변경할 수도 있습니다:

sea_creatures[-3] = 'blobfish'
print(sea_creatures)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']

이제 'blobfish'가 음수 색인 번호 -3 (양수 색인 번호 2에 해당)에 'squid'를 대체했습니다.

목록 내의 항목을 수정할 수 있는 능력은 목록을 효율적으로 변경하고 업데이트하는 기능을 제공합니다.

리스트 자르기

리스트에서 몇 가지 항목을 호출할 수도 있습니다. 예를 들어, sea_creatures의 중간 항목만 출력하려면 슬라이스를 만들어서 할 수 있습니다. 슬라이스를 사용하면 콜론으로 구분된 인덱스 번호의 범위를 만들어 여러 값을 호출할 수 있습니다. [x:y] 형식으로:

print(sea_creatures[1:4])
Output
['octopus', 'blobfish', 'mantis shrimp']

슬라이스를 생성할 때, [1:4]와 같이 첫 번째 인덱스 번호는 슬라이스가 시작하는 위치입니다(포함), 두 번째 인덱스 번호는 슬라이스가 끝나는 위치입니다(배제). 따라서 위 예제에서 1, 2, 3 위치에 있는 항목이 출력됩니다.

리스트에서 양 끝 중 하나를 포함하려면, list[x:y] 구문 중 하나의 숫자를 생략할 수 있습니다. 예를 들어, 리스트 sea_creatures의 처음 3개 항목 — 즉, 'shark', 'octopus', 'blobfish' — 를 출력하려면 다음과 같이 입력할 수 있습니다:

print(sea_creatures[:3])
Output
['shark', 'octopus', 'blobfish']

이렇게 하면 리스트의 시작 부분이 출력되고, 인덱스 3 바로 앞에서 멈춥니다.

리스트의 끝에 있는 모든 항목을 포함하려면, 구문을 반대로 바꿀 수 있습니다:

print(sea_creatures[2:])
Output
['blobfish', 'mantis shrimp', 'anemone']

리스트를 자를 때 음수 인덱스 번호도 사용할 수 있으며, 양수 인덱스 번호와 비슷합니다:

print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
Output
['octopus', 'blobfish'] ['blobfish', 'mantis shrimp', 'anemone']

마지막으로 슬라이싱에 사용할 수 있는 하나의 추가 매개변수는 stride로, 리스트에서 첫 번째 항목을 검색한 후 몇 개의 항목을 전진할지를 나타냅니다. 지금까지 우리는 스트라이드 매개변수를 생략하고 Python은 1의 스트라이드를 기본값으로 사용하여 두 인덱스 번호 사이의 모든 항목을 검색합니다.

이 구성의 구문은 list[x:y:z]이며, 여기서 z는 스트라이드를 나타냅니다. 이제 더 큰 리스트를 만들고, 그것을 잘라내어 스트라이드에 값을 2로 지정해 보겠습니다:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

print(numbers[1:11:2])
Output
[1, 3, 5, 7, 9]

우리의 구성 numbers[1:11:2]1부터 11까지의 인덱스 번호 사이의 값을 인쇄한 다음, 스트라이드 값 2은 프로그램에게 매번 다른 항목만 출력하도록 지시합니다.

첫 두 매개변수를 생략하고 매개변수로 스트라이드만 사용할 수도 있습니다. 구문은 list[::z]입니다:

print(numbers[::3])
Output
[0, 3, 6, 9, 12]

리스트 numbers를 스트라이드를 3으로 설정하여 출력하면 매 세 번째 항목만 출력됩니다:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

양수와 음수 인덱스 번호 모두를 사용하여 리스트를 슬라이싱하고 스트라이드를 표시하면 우리가 원하는 출력을 조작하고 받을 수 있게 됩니다.

연산자로 리스트 수정하기

연산자는 목록을 수정하는 데 사용될 수 있습니다. +* 연산자 및 이들의 합성 형태 +=*=를 검토하겠습니다.

+ 연산자는 두 개 이상의 목록을 연결하는 데 사용될 수 있습니다:

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

print(sea_creatures + oceans)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

+ 연산자는 연결할 수 있기 때문에 다른 목록 끝에 항목 (또는 여러 개)을 추가하는 데 사용할 수 있습니다. 항목을 대괄호에 넣어야 합니다:

sea_creatures = sea_creatures + ['yeti crab']
print (sea_creatures)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

* 연산자는 목록을 곱하는 데 사용될 수 있습니다. 아마도 디렉토리의 모든 파일을 서버에 복사하거나 플레이리스트를 친구들과 공유해야 할 수도 있습니다 — 이러한 경우에 데이터 컬렉션을 곱해야 할 수 있습니다.

sea_creatures 목록을 2배로 곱하고 oceans 목록을 3배로 곱해 봅시다:

print(sea_creatures * 2)
print(oceans * 3)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab'] ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

* 연산자를 사용하여 지정한 횟수만큼 목록을 복제할 수 있습니다.

할당 연산자 =+* 연산자의 합성 형태를 사용할 수도 있습니다. +=*= 합성 연산자를 사용하여 목록을 빠르고 자동화된 방식으로 채울 수 있습니다. 이러한 연산자를 사용하여 나중에 사용자가 제공한 입력으로 수정할 수 있는 목록을 채울 수 있습니다.

목록 sea_creatures에 목록 형태의 항목을 추가하겠습니다. 이 항목은 자리 표시자로 작동하며 이러한 자리 표시자 항목을 여러 번 추가하려고 합니다. 이를 위해 += 연산자를 for 루프와 함께 사용하겠습니다.

for x in range(1,4):
    sea_creatures += ['fish']
    print(sea_creatures)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish'] ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish'] ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']

for문의 각 반복에 대해 추가로 'fish' 항목이 원래 목록 sea_creatures에 추가됩니다.

*= 연산자는 유사한 방식으로 동작합니다:

sharks = ['shark']

for x in range(1,4):
    sharks *= 2
    print(sharks)
Output
['shark', 'shark'] ['shark', 'shark', 'shark', 'shark'] ['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']

+* 연산자를 사용하여 목록을 연결하고 목록을 곱할 수 있습니다. 복합 연산자 +=*=는 목록을 연결하고 목록을 곱하고 새로운 식별자를 원래 목록에 전달할 수 있습니다.

목록에서 항목 제거하기

del 문을 사용하여 목록에서 항목을 제거할 수 있습니다. 이렇게 하면 목록 내에서 지정한 인덱스 번호의 값을 삭제합니다.

sea_creatures 목록에서 항목 'octopus'을 제거해 보겠습니다. 이 항목은 인덱스 위치 1에 있습니다. 항목을 제거하려면 del 문을 사용한 다음 해당 항목의 목록 변수 및 인덱스 번호를 호출하면 됩니다:

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1]
print(sea_creatures)
Output
['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

이제 인덱스 위치 1의 항목, 문자열 'octopus'가 더 이상 목록 sea_creatures에 없습니다.

del 문으로 범위를 지정할 수도 있습니다. 'octopus' 항목뿐만 아니라 'blobfish''mantis shrimp' 항목도 제거하려면 sea_creatures에서 범위를 호출하여 del 문을 사용할 수 있습니다:

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1:4]
print(sea_creatures)
Output
['shark', 'anemone', 'yeti crab']

del 문을 사용하여 범위를 지정하여, 1번째 인덱스(포함)와 4번째 인덱스(불포함) 사이의 항목들을 제거하여, 3개의 항목이 남은 목록을 얻을 수 있었습니다.

del 문을 사용하면 목록 데이터 유형에서 특정 항목을 제거할 수 있습니다.

목록 항목을 사용하여 목록 구성하기

목록은 목록을 구성하는 항목으로 정의될 수 있으며, 각 괄호로 묶인 목록이 부모 목록의 더 큰 괄호 안에 포함됩니다:

sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'],['Sammy', 'Jesse', 'Drew', 'Jamie']]

이 목록 내부의 목록을 중첩된 목록이라고 합니다.

이 목록 내에서 항목에 액세스하려면 여러 인덱스를 사용해야 합니다:

print(sea_names[1][0])
print(sea_names[0][0])
Output
Sammy shark

첫 번째 목록은 항목과 같으므로 0번 인덱스를 갖게 되며, 이는 구성에서 첫 번째 번호가 됩니다. 그리고 두 번째 목록은 1번 인덱스를 갖게 됩니다. 각 내부 중첩된 목록 내에서는 별도의 인덱스 번호가 있으며, 이를 두 번째 인덱스 번호로 호출할 것입니다:

sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'

sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'

목록 내부의 목록을 다룰 때 특정 항목에 액세스하기 위해 관련 중첩된 목록 내의 항목에 대한 더 많은 인덱스 번호를 참조해야 합니다.

결론

리스트 데이터 유형은 프로그램 진행 중에 수정할 수 있는 유연한 데이터 유형입니다. 이 자습서에서는 인덱싱, 슬라이싱, 수정 및 리스트 연결과 같은 리스트의 기본 기능을 다룹니다.

여기서 파이썬에서 리스트 작업에 대해 더 알아보려면 “리스트 메서드 사용 방법”을 읽어보세요. 또한 기존 리스트를 기반으로 리스트를 생성하는 리스트 내포에 대해 알아볼 수 있습니다. 일반적으로 데이터 유형에 대해 자세히 알아보려면 “데이터 유형 이해” 자습서를 읽어보세요.

Source:
https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3