Python에는 'list'라는 훌륭한 내장 목록 유형이 있습니다. 목록 리터럴은 대괄호 [ ]로 작성됩니다. 목록은 문자열과 비슷하게 작동합니다. len() 함수와 대괄호 [ ]를 사용하여 데이터에 액세스할 수 있으며, 첫 번째 요소는 색인 0에 있습니다. 공식 python.org 목록 문서를 참조하세요.
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
목록에 =를 사용하여 할당해도 사본이 생성되지 않습니다. 대신 할당을 통해 두 변수가 메모리의 하나의 목록을 가리키게 됩니다.
b = colors ## Does not copy the list
'빈 목록'은 빈 대괄호 [ ]입니다. '+'는 두 개의 목록을 추가하는 역할을 하므로 [1, 2] + [3, 4]는 [1, 2, 3, 4]를 생성합니다(문자열에 +를 사용하는 것과 마찬가지입니다).
FOR 및 IN
Python의 *for* 및 *in* 구조는 매우 유용하며, 여기서는 목록으로 사용할 것입니다. *for* 구성(for var in list
)은 목록(또는 다른 컬렉션)의 각 요소를 쉽게 확인하는 방법입니다. 반복 중에 목록에 추가하거나 삭제하지 마세요.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
목록에 어떤 종류의 항목이 있는지 알고 있다면 루프에서 'num', 'name', 'url'과 같은 정보를 캡처하는 변수 이름을 사용합니다. Python 코드에는 유형을 알려주는 다른 문법이 없으므로 변수 이름은 어떤 일이 일어나고 있는지 파악하는 데 중요한 방법입니다. (약간 혼동을 줄 수 있습니다. Python에 더 많이 노출됨에 따라 함수 정의에 입력 정보를 추가할 수 있는 유형 힌트에 대한 참조가 표시됩니다. Python은 프로그램을 실행할 때 이러한 유형 힌트를 사용하지 않습니다. 이러한 함수는 IDE(통합 개발 환경)와 같은 다른 프로그램과 린터/유형 검사기와 같은 정적 분석 도구에서 함수가 호환되는 인수로 호출되는지 확인하는 데 사용됩니다.)
*in* 구성 자체는 요소가 목록(또는 다른 컬렉션)에 표시되는지 간편하게 테스트하는 방법입니다. value in collection
는 값이 컬렉션에 있는지 테스트하여 true/false를 반환합니다.
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
for/in 구문은 Python 코드에서 매우 흔히 사용되며 나열 이외의 데이터 유형에서 작동하므로 그 문법만 기억해야 합니다. 다른 언어에서 컬렉션을 수동으로 반복하는 습관이 있을 수 있지만 Python에서는 for/in을 사용해야 합니다.
for/in을 사용하여 문자열 작업을 할 수도 있습니다. 문자열은 문자의 목록처럼 작동하므로 for ch in s: print(ch)
는 문자열의 모든 문자를 출력합니다.
범위
range(n) 함수는 0, 1, ... n-1 숫자를 생성하고 range(a, b)는 마지막 숫자를 제외하고 a, a+1, ... b-1을 반환합니다. for 루프와 range() 함수를 조합하면 기존의 숫자 for 루프를 빌드할 수 있습니다.
## print the numbers from 0 through 99 for i in range(100): print(i)
성능에 민감한 사례의 경우 전체 목록을 빌드하는 비용을 피하는 변형 xrange()가 있습니다. Python 3에서는 range()가 우수한 성능 동작을 가지므로 xrange()는 잊어버려도 됩니다.
While 루프
Python에는 표준 while 루프도 있으며 *break* 및 *continue* 문은 C++ 및 Java에서와 같이 작동하여 가장 안쪽 루프의 경로를 변경합니다. 위의 for/in 루프는 목록의 모든 요소를 반복하는 일반적인 사례를 해결하지만 while 루프를 사용하면 색인 숫자를 완전히 제어할 수 있습니다. 다음은 목록의 3번째 요소마다 액세스하는 while 루프입니다.
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
메서드 나열
다음은 몇 가지 일반적인 목록 메서드입니다.
- list.append(elem) -- 목록 끝에 단일 요소를 추가합니다. 일반적인 오류: 새 목록을 반환하지 않고 원본을 수정합니다.
- list.insert(index, elem) -- 지정된 색인에 요소를 삽입하여 요소를 오른쪽으로 이동합니다.
- list.extend(list2)는 list2의 요소를 목록 끝에 추가합니다. 목록에 + 또는 +=를 사용하는 것은 extend()를 사용하는 것과 유사합니다.
- list.index(elem) -- 목록의 시작 부분에서 지정된 요소를 검색하여 색인을 반환합니다. 요소가 표시되지 않으면 ValueError가 발생합니다(ValueError 없이 확인하려면 'in'을 사용하세요).
- list.remove(elem) -- 지정된 요소의 첫 번째 인스턴스를 검색하여 삭제합니다(요소가 없으면 ValueError가 발생함).
- list.sort() -- 목록을 정렬합니다(반환하지 않음). 나중에 표시되는 sorted() 함수를 사용하는 것이 좋습니다.
- list.reverse() -- 기존 목록을 역전시킵니다 (반환하지 않음).
- list.pop(index) -- 지정된 색인의 요소를 삭제하고 반환합니다. 색인이 생략된 경우 가장 오른쪽 요소를 반환합니다(대략 append()의 반대).
이들은 목록 객체의 *메서드* 이고 len()은 목록 (또는 문자열 등 무엇이든)을 인수로 받는 함수입니다.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
일반적인 오류: 위의 메서드는 수정된 목록을 *반환*하지 않으며 원래 목록만 수정합니다.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
List Build Up
일반적인 패턴 중 하나는 목록을 빈 목록 []으로 시작한 다음 append() 또는 extend()를 사용하여 요소를 추가하는 것입니다.
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
슬라이스 나열
슬라이스는 문자열과 마찬가지로 목록에서 작동하며 목록의 하위 부분을 변경하는 데도 사용할 수 있습니다.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
연습: list1.py
이 섹션의 자료를 연습하려면 기본 연습의 list1.py에서 정렬을 사용하지 않는 문제를 시도해 보세요.