1. 리스트 (List)
리스트는 여러 요소들을 갖는 집합(컬렉션)으로 새로운 요소를 추가하거나 갱신, 삭제하는 일이 가능하다. 파이썬의 리스트는 동적배열(Dynamic Array)로서 자유롭게 확장할 수 있는 구조를 갖는다. 리스트는 그 안의 요소(element)들은 그 값을 자유롭게 변경할 수 있는 Mutable 데이타 타입이다.
리스트의 요소들은 Square bracket([ ])으로 둘러쌓여 컬렉션을 표현하는데, 각 요소들은 서로 다른 타입이 될 수 있으며, 컴마(,)로 구분한다. 요소가 없는 빈 리스트는 "[]"와 같이 표현한다.
a = [] # 빈 리스트 a = ["AB", 10, False]
2. 리스트 인덱싱(Indexing)
리스트의 특정 한 요소만을 선택하기 위하여 인덱싱(Indexing)을 사용하는데, 첫번째요소는 "리스트[0]", 두번째 요소는 "리스트[1]" 처럼 표현한다. 즉, 아래 예제에서 처럼 리스트 a 가 있을 때, a[1] 는 두번째 요소 10을 가리킨다. 파이썬 인덱싱에서 한가지 특별한 표현은 인덱스에 -1, -2 같은 음수를 사용할 수 있다는 점이다. 이 때, -1은 현재 리스트의 마지막 요소를, -2는 뒤에서 두번째 요소를 가리킨다.
a = ["AB", 10, False] x = a[1] # a의 두번째 요소 읽기 a[1] = "Test" # a의 두번째 요소 변경 y = a[-1] # False
3. 리스트 슬라이싱(Slicing)
리스트에서 일부 부분 요소들을 선택하기 위하여 슬라이스(Slice)를 사용한다. 슬라이스는 "리스트[처음인덱스:마지막인덱스]"와 같이 인덱스 표현에서 부분집합의 범위를 지정하는 것이다. 인덱스는 0 부터 시작하며, 마지막 인덱스를 원하는 "마지막 요소의 인덱스 + 1"을 의미한다. 만약 처음인덱스가 생략되면, 0 부터 시작되며, 마지막 인덱스가 생략되면, 리스트의 끝까지 포함됨을 의미한다.
a = [1, 3, 5, 7, 10] x = a[1:3] # [3, 5] x = a[:2] # [1, 3] x = a[3:] # [7, 10] x = a[:] # 전체
슬라이스에서 "리스트[처음인덱스:마지막인덱스:스텝]"과 같이 3번째에 Step을 둘 수 있다. 예를 들어, Step=2를 설정하면, 한 칸씩 건너 뛰면서 요소를 찾게 된다.
a = [1, 2, 3, 4, 5] x = a[::2] # [1, 3, 5]
슬라이스를 이용하여 리스트를 역순으로(Reverse) 정렬하기 위해서는 아래와 같이 Step을 -1 로 지정하면 된다.
a = [1, 2, 3, 4, 5] x = a[::-1] # [5, 4, 3, 2, 1]
4. 리스트 요소 추가,수정,삭제
리스트에 새로운 요소를 추가하기 위해서는 "리스트.append()"를 사용한다. 리스트 요소를 갱신하기 위해서는 리스트 인덱싱을 사용하여 특정요소에 새 값을 넣는다. 리스트 요소를 삭제하기 위해서는 "del 요소"와 같이 특정 요소를 지운다.
a = ["AB", 10, False] a.append(21.5) # 추가 a[1] = 11 # 변경 del a[2] # 삭제 print(a) # ['AB', 11, 21.5]
5. 리스트 병합과 반복
두 개의 리스트를 병합하기 위해서는 플러스(+)를 사용한다. 이 때 두 리스트는 순서대로 병합된 새로운 하나의 리스트가 된다. 하나의 리스트를 N 번 반복하기 위해서는 "리스트 * N"와 같이 표현할 수 있다. 이는 동일한 리스트를 계속 반복한 새 리스트를 만들게 된다.
# 병합 a = [1, 2] b = [3, 4, 5] c = a + b print(c) # [1, 2, 3, 4, 5] # 반복 d = a * 3 print(d) # [1, 2, 1, 2, 1, 2]
6. 리스트 검색
리스트 안에 특정 요소를 검색하기 위해서 index() 메서드를 사용한다. 또한 특정 요소가 몇 개 있는지 체크하기 위해서 count() 메서드를 사용할 수 있다.
mylist = "This is a book That is a pencil".split() i = mylist.index('book') # i = 3 n = mylist.count('is') # n = 2 print(i, n)
7. List Comprehension
리스트의 [...] 괄호 안에 for 루프를 사용하여 반복적으로 표현식(expression)을 실행해서 리스트 요소들을 정의하는
특별한 용법이 있는데, 이를 List Comprehension 이라 부른다.
이는 아래와 같은 문법으로 컬렉션으로부터 요소를 하나씩 가져와 표현식을 실행하여
그 결과를 리스트에 담는 방식이다. 여기서 if 조건식은 옵션으로 추가될 수 있는데 for 루프에서
이 조건식에 맞는 요소만 표현식을 실행하게 된다.
[표현식 for 요소 in 컬렉션 [if 조건식]]
아래 예제는 0부터 9까지 숫자들중 3으로 나눈 나머지가 0인 숫자에 대해 그 제곱에 대한 리스트를 구한 예이다.
list = [n ** 2 for n in range(10) if n % 3 == 0] print(list) # 출력: [0, 9, 36, 81]