PYTHON.


02. 파이썬의 프로그래밍의 기초, 자료형. 


02-3 리스트 자료형PYTHON. 02

* 리스트는 어떻게 만들고 사용할까?

>>> a = [ ] // 비어 있는 리스트는 a = list()로 생성할 수도 있다. >>> b = [1, 2, 3] >>> c = ['Life', 'is', 'too', 'short'] >>> d = [1, 2, 'Life', 'is'] >>> e = [1, 2, ['Life', 'is']] // 리스트 자체를 요소 값으로 가질 수도 있다.
리스트 안에는 어떠한 자료형도 포함시킬 수 있다.


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

리스트의 인덱싱

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

>>> a[0] 1

>>> a[0] + a[2] 4

>>> a[-1] 3

>>> a[-2]

2


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

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

>>> a[-1][0] 'a'

>>> a[-1][1] 'b' >>> a[-1][2] 'c'


[삼중 리스트에서 인덱싱하기]

>>> a = [1, 2, ['a', 'b', ['Life', 'is']]]
>>> a[2][2][0]
'Life'

리스트의 슬라이싱

>>> 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] >>> c = a[2:] >>> b [1, 2] >>> c [3, 4, 5]



[중첩된 리스트에서 슬라이싱하기]

리스트가 포함된 중첩 리스트 역시 슬라이싱 방법은 똑같이 적용된다.

>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5]
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]
['a', 'b']

위의 예에서 a[3]은 ['a', 'b', 'c']를 나타낸다. 따라서 a[3][:2]는 ['a', 'b', 'c']의 첫 번째 요소부터 세 번째 요소 직전까지의 값, 즉 ['a', 'b']를 나타내는 리스트가 된다.

리스트 연산자

1) 리스트 더하기(+)

>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a + b [1, 2, 3, 4, 5, 6]


2) 리스트 반복하기(*)

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



[초보자가 범하기 쉬운 리스트 연산 오류]

다음과 같은 소스 코드를 입력했을 때 결과값은 어떻게 나올까?

>>>a = [1, 2, 3]
>>>a[2] + "hi"

a[2]의 값인 3과 문자열 hi가 더해져서 3hi가 출력될 것이라고 생각할 수 있다. 하지만 다음의 결과를 보자. 형 오류(TypeError)가 발생했다. 오류의 원인은 무엇일까?

Traceback (innermost last):
File "", line 1, in ?
a[2] + "hi"
TypeError: number coercion failed

a[2]에 저장된 값은 3이라는 정수인데 "hi"는 문자열이다. 정수와 문자열은 당연히 서로 더할 수 없기 때문에 형 오류가 발생한 것이다.

만약 숫자와 문자열을 더해서 '3hi'처럼 만들고 싶다면 숫자 3을 문자 '3'으로 바꾸어 주어야 한다. 다음과 같이 할 수 있다.

>>>str(a[2]) + "hi"

str()은 정수나 실수를 문자열의 형태로 바꾸어 주는 파이썬의 내장 함수이다.

리스트의 수정, 변경과 삭제

1. 리스트에서 하나의 값 수정하기

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

2. 리스트에서 연속된 범위의 값 수정하기

>>> a[1:2] [2] >>> a[1:2] = ['a', 'b', 'c'] >>> a [1, 'a', 'b', 'c', 4]

[리스트 수정할 때 주의할 점]

2번 예제에서 리스트를 a[1:2] = ['a', 'b', 'c']로 수정하는 것과 a[1] = ['a', 'b', 'c']로 수정하는 것은 전혀 다른 결과값을 갖게 되므로 주의해야 한다. a[1] = ['a', 'b', 'c']는 리스트 a의 두 번째 요소를 ['a', 'b','c']로 바꾼다는 말이고 a[1:2]는 a[1]에서 a[2] 사이의 리스트를 ['a', 'b', 'c']로 바꾼다는 말이다. 따라서 a[1] = ['a', 'b', 'c']로 수정하게 되면 위와는 달리 리스트 a가 [1, ['a', 'b', 'c'], 4]라는 값으로 변하게 된다.

>>> a[1] = ['a', 'b', 'c']
>>> a
[1, ['a', 'b', 'c'], 4]

3. [ ] 사용해 리스트 요소 삭제하기

>>> a = [1, 'a', 'b', 'c', 4]

>>> a[1:3] = [ ] >>> a [1, 'c', 4]

4. del 함수 사용해 리스트 요소 삭제하기

>>> a [1, 'c', 4] >>> del a[1] >>> a [1, 4]

* 리스트 관련 함수들

- 리스트에 요소 추가(append)

// append(x)는 리스트의 맨 마지막에 x를 추가시키는 함수이다.

>>> a = [1, 2, 3] >>> a.append(4) >>> a [1, 2, 3, 4]
>>> a.append([5,6]) >>> a [1, 2, 3, 4, [5, 6]]

- 리스트 정렬(sort)

// sort 함수는 리스트의 요소를 순서대로 정렬해 준다.

>>> a = [1, 4, 3, 2] >>> a.sort() >>> a [1, 2, 3, 4]

>>> a = ['a', 'c', 'b'] // 문자 역시 알파벳 순서로 정렬할 수 있다. >>> a.sort() >>> a ['a', 'b', 'c']


- 리스트 뒤집기(reverse)

// reverse 함수는 리스트를 역순으로 뒤집어 준다

>>> a = ['a', 'c', 'b'] >>> a.reverse() >>> a ['b', 'c', 'a']

- 위치 반환(index)

// index(x) 함수는 리스트에 x라는 값이 있으면 x의 위치값을 리턴한다.

>>> a = [1,2,3] >>> a.index(3) 2 >>> a.index(1) 0


- 리스트에 요소 삽입(insert)

// insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다.

>>> a = [1, 2, 3] >>> a.insert(0, 4) [4, 1, 2, 3]
>>> a.insert(3, 5) [4, 1, 2, 5, 3]


- 리스트 요소 제거(remove)

// remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.

>>> a = [1, 2, 3, 1, 2, 3] >>> a.remove(3) [1, 2, 1, 2, 3]

>>> a.remove(3) [1, 2, 1, 2]


- 리스트 요소 끄집어내기(pop)

// pop()은 리스트의 맨 마지막 요소를 돌려 주고 그 요소는 삭제하는 함수이다

>>> a = [1,2,3] >>> a.pop() 3 >>> a [1, 2]

// pop(x)는 리스트의 x번째 요소를 돌려 주고 그 요소는 삭제한다.

>>> a = [1,2,3] >>> a.pop(1) 2 >>> a [1, 3]

- 리스트에 포함된 요소 x의 개수 세기(count)

// 
>>> a = [1,2,3,1] >>> a.count(1) 2

- 리스트 확장(extend)

extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.

>>> a = [1,2,3] >>> a.extend([4,5]) >>> a [1, 2, 3, 4, 5] >>> b = [6, 7] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6, 7]


리스트의 요소를 제거하는 3가지 방법

지금까지 알아본 리스트의 요소를 제거하는 방법은 총 3가지이다.

  1. 리스트의 remove 함수 이용하기
  2. 리스트의 pop 함수 이용하기
  3. del을 이용하기

이 3가지 방법은 결과적으로 리스트의 요소가 삭제된다는 점에서는 동일하지만 삭제에 사용되는 입력값에는 큰 차이점이 있다. 예제로 알아보자.

>>> a = [1, 2, 3, 'a', 'b', 'c']
>>> a.remove('a')
>>> a
[1, 2, 3, 'b', 'c']

1. a.remove('a')는 a 리스트의 'a'라는 요소값을 삭제한다. 즉, a.remove(x)의 x에는 인덱스가 아닌 요소값 만을 사용할 수 있다. 참고로 다음과 같이 리스트의 요소를 인덱스로 삭제하려고 하면 다음과 같은 오류가 발생한다.

>>> a.remove(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

2. pop은 remove와 반대로 요소값으로 삭제할 수는 없고 인덱스로만 삭제가 가능하다. 즉, a.pop(x)의 x에는 a리스트의 인덱스만 가능하다. 다음의 예제로 확인해 보자.

>>> a = [1, 2, 3, 'a', 'b', 'c']
>>> a.pop(4)
'b'
>>> a
[1, 2, 3, 'a', 'c']

a.pop(4)는 a리스트의 5번째 요소를 삭제한다. 단, pop함수는 삭제된 요소를 리턴받는 특징이 있다.

만약 pop 함수 사용시 인덱스가 아닌 요소값을 이용한다면 다음과 같은 오류를 만나게 될 것이다.

>>> a.pop('b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer

3. del은 리스트의 요소를 삭제하는 함수이므로 당연히 인덱스만 가능하다.

>>> a = [1, 2, 3, 'a', 'b', 'c']
>>> del a[4]
>>> a
[1, 2, 3, 'a', 'c']

del a[4] 는 a리스트의 5번째 요소를 삭제한다는 것을 알 수 있다.

즉, 결론은 다음과 같다.

  1. a.remove(x) - x는 a리스트의 요소값
  2. a.pop(x) - x는 a리스트의 인덱스
  3. del a[x] - x는 a리스트의 인덱스


Posted by 너래쟁이
: