본문 바로가기

Programing/Python

[Python 입문] 4. 파이썬 자료형 - 리스트

목차

  • 리스트란?
  • 리스트의 인덱싱과 슬라이싱
  • 리스트 연산자
  • 리스트의 수정 (변경, 삭제)
  • 리스트 관련 함수들

리스트(List)

1. 리스트란?

 리스트를 이용하면 1, 3, 5, 7, 9와 같은 숫자 모음을 간단하게 표현할 수 있다.

>>> a = []   <---- 비어있는 리스트
>>> b = [1, 2, 3]   <---- 숫자를 요소값으로 가진 리스트
>>> c = ['Life', 'is', 'too', 'short']   <---- 문자열을 요소값으로 가진 리스트
>>> d = [1, 2, 'Life', 'is']   <---- 숫자와 문자열을 함께 요소값으로 가진 리스트
>>> e = [1, 2, ['Life', 'is']]   <---- 리스트 자체를 요소값으로 가진 리스트

 위의 소스코드와 같이 여러 가지 리스트의 형태가 있다. 첫 번째 소스코드와 같이 비어있는 리스트도 생성할 수 있다.

 

 

2. 리스트의 인덱싱과 슬라이싱

2.1. 리스트 인덱싱(Indexing)

 리스트 역시 문자열과 같이 인덱싱을 할 수 있다.

>>> a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[0]   <---- 변수 a에 저장된 리스트 중 첫 번째에 위치한 요소값
1
>>> a[-1]   <---- 변수 a에 저장된 리스트 중 마지막에 위치한 요소값
3
>>> a[0] + a[2]   <---- 변수 a에 저장된 리스트 중 첫 번째와 세 번째에 위치한 요소값의 합
4

 가장 아래에 위치한 소스코드와 같이 리스트의 각 요소의 값을 더할 수도 있다.

 

리스트 자체를 요소값으로 가진 리스트의 인덱싱 역시 가능하다.

>>> a = [1, 2, 3, ['a', 'b', 'c']]
>>> a[0]
1
>>> a[-1]
['a', 'b', 'c']
>>> a[3]
['a', 'b', 'c']

 a에 저장된 리스트 중 a[-1]는 마지막 요소 값, a[3]은 네 번째 요소 값을 나타내기 때문에 동일한 결과를 보여준다.

 아래의 소스코드는 a에 저장된 ['a', 'b', 'c'] 리스트에 인덱싱하는 방법이다.

# 이중 리스트 인덱싱
>>> a = [1, 2, 3, ['a', 'b', 'c']]
>>> a[-1][0]
'a'
>>> a[-1][2]
'c'

# 삼중 리스트 인덱싱
>>> a = [1, 2, ['a', 'b', ['Life', 'is']]]
>>> a[2][2][0]
'Life'

 엄청 단순한 방법으로 리스트에 요소값으로 포함된 이중 또는 삼중 리스트 역시 인덱싱이 가능하다. 

 

 

2.2. 리스트 슬라이싱(Slicing)

 인덱싱과 같이 리스트역시 슬라이싱이 가능하다.

# 리스트의 슬라이싱
>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]

# 문자열의 슬라이싱
>>> a = "12345"
>>> a[0:2]
'12'

 위 소스코드를 보면 문자열에서 슬라이싱 했던 방법과 완전히 똑같은 것을 알 수 있다.

 리스트의 슬라이싱을 몇가지 연습해본다.

# 기본 리스트의 슬라이싱
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]   <---- 리스트의 처음부터 a[1]까지
>>> c = a[2:]   <---- 리스트의 a[2]부터 마지막까지
>>> b
[1, 2]
>>> c
[3, 4, 5]

# 중첩 리스트의 슬라이싱
>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5]   <---- 리스트의 a[2]부터 a[4]까지
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]   <---- 리스트의 a[3]에 위치한 ['a', 'b', 'c'] 중 첫 번째 부터 두 번째 요소까지
['a', 'b']

 

 

3. 리스트 연산자

 문자열과 같이 리스트 역시 연산자를 사용해 더하거나 반복할 수 있다.

# 리스트 더하기 (+)
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b   <---- 문자열에서와 같이 2개의 리스트를 합치는 기능
[1, 2, 3, 4, 5, 6]

# 리스트 반복 (*)
>>> a = [1, 2, 3]
>>> a * 3   <---- 문자열에서와 같이 [1, 2, 3]이라는 리스트를 세 번 반복하는 기능
[1, 2, 3, 1, 2, 3, 1, 2, 3]

 

 

4. 리스트의 수정 (변경, 삭제)

>>> a = [1, 2, 3]

# 리스트 [1, 2, 3]에서 하나의 값만 수정
>>> a[2] = 4   <---- [1, 2, 3] 중 세 번째 위치한 3을 4로 변경
>>> a
[1, 2, 4]

# 리스트에서 연속된 범위와 값 수정
>>> a[1:2]   <---- 문자열 슬라이싱과 같이 a[1]만을 뜻함
[2]
>>> a[1:2] = ['a', 'b', 'c']   <---- 리스트 중 a[1]에 위치한 2를 ['a', 'b', 'c']라는 값을 대입
>>> a
[1, 'a', 'b', 'c', 4]

# []를 사용해 리스트 요소 삭제
>>> a[1:3] = []   <---- a[1]부터 a[2]까지를 의미하는 ['a', 'b']를 삭제
>>> a
[1, 'c', 4]

# del 함수를 사용해 리스트 요소 삭제
>>> a
[1, 'c', 4]
>>> del a[1]   <---- a[1]인 'c'를 삭제
>>> a
[1, 4]

 del은 파이썬이 자체적으로 가지고 있는 삭제 함수를 말한다.

 참고로 리스트를 수정할 때 주의할 점이 있다. 아래의 소스코드로 테스트해본다.

# a[1:2]를 수정
>>> a = [1, 2, 3]
>>> a[1:2] = ['a', 'b', 'c']
>>> a
[1, 'a', 'b', 'c', 3]

# a[1]를 수정
>>> a = [1, 2, 3]
>>> a[1] = ['a', 'b', 'c']
>>> a
[1, ['a', 'b', 'c'], 3]

 a[1:2] = ['a', 'b', 'c']는 a[1]에서 a[2]사이의 리스트를 ['a', 'b', 'c']로 바꾼다는 뜻이고,

 a[1] = ['a', 'b', 'c']는 a의 두 번째 요소를 ['a', 'b', 'c']로 바꾼다는 뜻이다. 위 소스코드를 확인하면 무슨 말인지 이해할 수 있다.

 

 

5. 리스트 관련 함수들

 문자열에서 함수를 사용했던 방법과 같이 변수 뒤에 마침표 '.'를 붙여서 리스트와 관련된 여러 함수들을 사용할 수 있다.

# 리스트에 요소 추가 (append)
>>> a = [1, 2, 3]
>>> a.append(4)   <---- 리스트의 마지막에 4를 추가
>>> a
[1, 2, 3, 4]
>>> a.append([5, 6])   <---- 리스트의 마지막에 [5, 6]을 추가 (리스트 자체 추가 가능)
>>> a
[1, 2, 3, 4, [5, 6]]

# 리스트 정렬 (sort)
>>> a = [1, 4, 3, 2]
>>> a.sort()   <---- 리스트의 요소를 순서대로 정렬
>>> a
[1, 2, 3, 4]

>>> a = ['a', 'c', 'b']
>>> a.sort()   <---- 알파벳으로 구성된 리스트 역시 순서대로 정렬 가능
>>> a
['a', 'b', 'c']

# 리스트 뒤집기 (reverse)
>>> a = ['a', 'c', 'b']
>>> a.reverse()   <---- 리스트를 역순으로 뒤집어 준다. (순서 상관없이 현재의 리스트를 그대로 뒤집는다.)
>>> a
['b', 'c', 'a']

# 위치 반환 (index)
>>> a = [1, 2, 3]
>>> a.index(3)   <---- 리스트에서 3의 위치 반환
2   <---- a[2]에 위치하고 있기 때문에 2를 반환
>>> a.index(1)   <---- 리스트에서 1의 위치 반환
0   <----  a[0]에 위치하고 있기 때문에 0을 반환

>>> a.index(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 0 is not in list   <---- 리스트에 0이 존재하지 않기 때문에 오류 발생

# 리스트에 요소 추가 (insert)
# insert(a, b): a 번째 위치에 b를 추가하는 함수
>>> a = [1, 2, 3]
>>> a.insert(0, 4)   <---- a[0] 위치에 4 추가
>>> a
[4, 1, 2, 3]
>>> a.insert(3, 5)   <---- a[3] 위치에 5 추가
>>> a
[4, 1, 2, 5, 3]

# 리스트 요소 삭제 (remove)
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)   <---- 리스트에서 첫 번째로 나오는 3을 삭제
>>> a
[1, 2, 1, 2, 3]

# 리스트 요소 꺼내기 (pop)
>>> a = [1, 2, 3]
>>> a.pop()   <---- 리스트 맨 마지막의 요소를 돌려주고 해당 요소 삭제
3   <---- 리스트 마지막에 위치한 3을 보여주고 삭제
>>> a
[1, 2]

>>> a = [1, 2, 3]
>>> a.pop(1)   <---- 리스트의 a[1]에 위치한 요소를 돌려주고 해당 요소 삭제
2   <---- 리스트에서  a[1]에 위치한 2를 보여주고 삭제
>>> a
[1, 3]

# 리스트에 포함된 요소 X의 개수 파악 (count)
>>> a = [1, 2, 3, 1]
>>> a.count(1)   <---- 리스트 a에 1의 개수 파악
2

# 리스트 확장 (extend)
# extend(x)에서 x에는 리스트만 올 수 있다.
>>> a = [1, 2, 3]
>>> a.extend([4, 5])   <---- 리스트 a에 리스트 [4, 5]추가 (a.extend([4, 5])는 a += [4, 5]와 동일
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)   <---- 리스트 a에 리스트 b추가
>>> a
[1, 2, 3, 4, 5, 6, 7]

 

 

내용 출처: 책 '점프 투 파이썬'의 내용