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) 및 통합 개발 환경(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)
는 문자열의 모든 문자를 출력합니다.
범위
범위(n) 함수는 숫자 0, 1, ... n-1을 산출하며, 범위(a, b)는 a, a+1, ... b-1을 반환하고 마지막 숫자는 포함하지 않습니다. for-loop와 scope() 함수를 함께 사용하면 기존의 숫자 for 루프를 빌드할 수 있습니다.
## print the numbers from 0 through 99 for i in range(100): print(i)
성능에 민감한 사례의 전체 목록을 빌드하는 비용을 피할 수 있는 xrange() 변형이 있습니다 (Python 3에서 scope()가 성능이 좋으므로 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.append(elem) -- 목록의 끝에 단일 요소를 추가합니다. 일반적인 오류: 새 목록을 반환하지 않고 원본만 수정합니다.
- list.insert(index, elem) -- 지정된 색인에 요소를 삽입하여 요소를 오른쪽으로 이동합니다.
- list.extend(list2)는 list2의 요소를 목록 끝에 추가합니다. 목록에서 + 또는 += 를 사용하는 것은 확장()을 사용하는 것과 비슷합니다.
- list.index(elem) -- 목록의 시작 부분에서 지정된 요소를 검색하여 색인을 반환합니다. 요소가 나타나지 않으면 ValueError가 발생합니다 (ValueError 없이 확인하려면 'in'을 사용).
- list.remove(elem) -- 지정된 요소의 첫 번째 인스턴스를 검색하여 삭제합니다 (없는 경우 ValueError 발생).
- list.sort() -- 목록을 제자리에 정렬합니다 (반환하지 않음). (나중에 보여 줄 카테고리에서 정렬된() 함수를 사용하는 것이 좋습니다.)
- list.reverse() -- 기존 목록을 역전시킵니다 (반환하지 않음).
- list.pop(index) -- 지정된 색인에서 요소를 삭제하고 반환합니다. 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 = [] ## 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의 문제를 시도해 보세요 (기본 실습에서).