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
). 값이 컬렉션에 있는지 테스트하여 참/거짓을 반환합니다.
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)
는 문자열의 모든 문자를 출력합니다.
범위
범위(n) 함수는 숫자 0, 1, ... n-1을 생성하고 범위(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에서는 범위()가 우수한 성능 동작을 가지므로 xrange()는 고려하지 않아도 됩니다.
While 루프
Python에는 표준 while 루프도 있으며 *break* 및 *continue* 문은 C++와 Java에서처럼 작동하여 가장 안쪽 루프의 경로를 변경합니다. 위의 for/in 루프는 목록의 모든 요소를 반복하는 일반적인 사례를 해결하지만 while 루프를 사용하면 색인 번호를 완벽하게 제어할 수 있습니다. 다음은 목록의 모든 세 번째 요소에 액세스하는 while 루프입니다.
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
메서드 나열
다음은 몇 가지 일반적인 list 메서드입니다.
- list.append(elem) -- 목록 끝에 단일 요소를 추가합니다. 일반적인 오류: 새 목록을 반환하지 않고 원본만 수정합니다.
- list.insert(index, elem) -- 지정된 색인에 요소를 삽입하여 요소를 오른쪽으로 이동합니다.
- list.extend(list2)는 list2의 요소를 목록 끝에 추가합니다. 목록에서 + 또는 += 를 사용하는 것은 expand()를 사용하는 것과 비슷합니다.
- list.index(elem) -- 목록의 시작 부분부터 지정된 요소를 검색하여 색인을 반환합니다. 요소가 나타나지 않으면 ValueError가 발생합니다 (ValueError 없이 확인하려면 'in'을 사용).
- list.remove(elem) -- 지정된 요소의 첫 번째 인스턴스를 검색하여 삭제합니다 (없는 경우 ValueError 발생).
- list.sort() -- 목록을 제자리에 정렬합니다 (반환하지 않음). 나중에 표시되는 정렬() 함수를 사용하는 것이 좋습니다.
- list.reverse() -- 목록을 역전합니다 (반환하지 않음).
- list.pop(index) -- 지정된 색인에서 요소를 삭제하고 반환합니다. 색인이 생략되면 가장 오른쪽에 있는 요소를 반환합니다 (add()와 거의 반대).
이러한 메서드는 목록 객체의 *메서드* 이고 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 = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
슬라이스 나열
Slice는 문자열과 마찬가지로 목록에서 작동하며 목록의 하위 부분을 변경하는 데도 사용할 수 있습니다.
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에서 정렬을 사용하지 않는 list1.py의 문제를 풀어보세요.