Python 목록

Python에는 'list'라는 유용한 기본 제공 목록 유형이 있습니다. 목록 리터럴은 대괄호 [ ] 안에 작성됩니다. 목록은 문자열과 유사하게 작동합니다. 목록에 len() 함수와 대괄호 [ ] 를 사용하고 첫 번째 요소는 색인 0에 있습니다. 공식 python.org 목록 문서를 참조하세요.

  colors = ['red', 'blue', 'green']
  print(colors[0])    ## red
  print(colors[2])    ## green
  print(len(colors))  ## 3

'red' 'blue 'green' 문자열 목록

목록에 = 이 있는 할당은 복사되지 않습니다. 대신 할당은 두 변수가 메모리의 목록 하나를 가리키도록 합니다.

  b = colors   ## Does not copy the list

색상과 b는 모두 하나의 목록을 가리킵니다.

'빈 목록'은 빈 대괄호 [ ]일 뿐입니다. '+'는 두 목록을 추가하는 역할을 하므로 [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의 문제를 풀어보세요.