점프투파이썬_03_프로그래밍의 기초, 자료형: 리스트, 튜플

yh271·2022년 5월 12일
0

점프투파이썬

목록 보기
3/7
  1. 리스트의 인덱싱과 슬라이싱
>>> a = [1,2,3]
>>> a
[1, 2, 3]
>>> a[0]
1
>>> a[0] + a[2]
4

인덱스를 -로 지정하면 거꾸로 센다.

>>> a[-1]
3

리스트를 리스트의 요소로 포함하는 경우

>>> 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, 4, 5] 리스트에서 슬라이싱 기법을 사용하여 리스트 [2, 3]을 만들어 보자.
>>> A = [1, 2, 3, 4, 5]
>>> result = A[1:3]
>>> result
[2, 3]

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

>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5]
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]
['a', 'b']
  1. 리스트 연산하기
    1) 리스트 더하기(+) : 2가지의 리스트를 합친다. 문자열에서 했던 것과 같은 이치이다.
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]

>>> "abc" + "def"
'abcdef'

2) 리스트 반복하기(*) : 문자열에서 했던 것과 같은 이치이다.

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

>>> "abc" * 3
'abcabcabc'

3) 리스트 길이 구하기

>>> a = [1, 2, 3]
>>> len(a)
3

초보자가 실수하기 쉬운 리스트 연산 오류

# 정수와 문자열은 더할 수 없기에 오류가 발생함
>>> a = [1, 2, 3]
>>> a[2] + "hi"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

# str 함수는 정수나 실수를 문자열의 형태로 바꾸어 주는 파이썬의 내장 함수이다.
>>> str(a[2]) + "hi"
'3hi'
  1. 리스트의 수정과 삭제
    (문자열과의 차이점: https://velog.io/@yh271/jumptopython02 굵은 글씨 부분 참조)
# 리스트에서 값 수정하기
>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]

del a[x]는 x번째 요솟값을 삭제한다. 이 함수는 파이썬이 자체적으로 가지고 있는 삭제 함수이며 다음과 같이 사용한다.

del 객체

객체란 파이썬에서 사용되는 모든 자료형을 말한다.

# del 함수 사용해 리스트 요소 삭제하기
>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]
  1. 리스트 관련 함수
# 리스트에 요소 추가 (append)
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
a. append([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(x) 함수는 리스트에 x 값이 있으면 x의 위치 값을 돌려준다.
값 0은 a 리스트에 존재하지 않기 때문에 오류가 발생한다.

# 위치 반환(index)
>>> a = [1, 2, 3]
>>> a.index(3)
2
>>> a.index(1)
0
>>> a.index(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 0 is not in list

insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다. 배열의 참조가 항상 0부터 시작한다는 것을 기억하자

# 리스트에 요소 삽입(insert)
>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]
>>> a.insert(3, 5)
>>> a
[4, 1, 2, 5, 3]

remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.
아무 값도 입력하지 않으면 오류가 발생한다.

# 리스트 요소 제거(remove)
>>> a = [1,2,3,1,2,3]
>>> a.remove(3)
>>> a
[1, 2, 1, 2, 3]
>>> a.remove()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: remove() takes exactly one argument (0 given)

리스트 요소 끄집어내기(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]

count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려주는 함수이다.

# 리스트에 포함된 요소 x의 개수 세기(count)
>>> a = [1,2,3,1]
>>> a.count(1)
2
>>> a
[1, 2, 3, 1]

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]

a.extend([4,5]}는 a += [4,5]와 동일하다.

>>> a = [1,2,3]
>>> a += [4,5]
>>> a
[1, 2, 3, 4, 5]
  1. 튜플 자료형
    튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.
  • 리스트는 []으로 둘러싸지만 튜플은 ()으로 둘러싼다.
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.

튜플의 모습은 다음과 같다

>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3
>>> t5 = ('a', 'b', ('ab', 'cd'))

리스트와 다른 점

  • t2에서 단지 1개의 요소만을 가질 때도 요소 뒤에 콤마(,)를 반드시 붙여야 한다.
  • t4와 같이 괄호를 생략해도 무방하다.
  • 리스트와는 달리 튜플의 항목 값들은 변화가 불가능하다.
  • 값이 변경되지 않아야 하는 상황에서 사용한다.

1) 튜플의 요솟값을 삭제, 변경하려 할 때
둘다 에러가 발생한다.

# 튜플의 요소를 삭제하려는 시도
>>> t1 = (1, 2, 'a', 'b')
>>> del t1[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
# 튜플의 요소를 변경하려는 시도
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0] = 'c'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

2) 튜플 다루기
튜플은 값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전히 동일하다

# 인덱싱하기
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
# 슬라이싱하기
>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')
# 튜플 더하기
>>> t1 = (1, 2, 'a', 'b')
>>> t2 = (3, 4)
>>> t1 + t2
(1, 2, 'a', 'b', 3, 4)
# 튜플 곱하기
>>> t2 = (3, 4)
>>> t2 * 3
(3, 4, 3, 4, 3, 4)
# 튜플 길이 구하기
>>> t1 = (1, 2, 'a', 'b')
>>> len(t1)
4
  • 나혼자 코딩: (1,2,3)이라는 튜플에 값 4를 추가하여 (1, 2, 3, 4)를 만들어 출력해 보자
>>> t1 = (1, 2, 3)
>>> t2 = (4,)
>>> t1 + t2
(1, 2, 3, 4)

에러가 발생하는 경우

# 정수형과 튜플을 더할 수 없음
>>> t1 = (1, 2, 3)
>>> t1 + 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "int") to tuple
# 아래 t2와 같이 콤마(,)를 기재하지 않으면 정수형으로 취급된다.
>>> t1 = (1, 2, 3)
>>> t2 = (4)
>>> t1 + t2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "int") to tuple

0개의 댓글