All Articles

파이썬 기억 더듬기 (2) - 자료형 다루기

파이썬 자료형

파이썬 자료형 종류와 각 자료형 특징 정리

  • 리스트(list): 순서o, 중복o, 수정o, 삭제o
  • 튜플(tuple): 순서o, 중복o, 수정x, 삭제x
  • 집합(set): 순서x, 중복x, 수정o, 삭제o
  • 딕셔너리(dictionary): 순서x, 중복x, 수정o, 삭제o

리스트 다루기 - 삽입

슬라이싱으로 위치 잡아서 리스트를 넣어주면 해당 리스트 값만 들어온다.

> list1 = [0, 1, 2, 3, 4]
> list1[0:1] = [10, 100, 1000]
> print(list1)
[10, 100, 1000, 1, 2, 3, 4]

인덱스로 위치 잡아서 리스트를 넣어주면 해당 리스트 통째로 들어간다.

> list2 = [0, 1, 2, 3, 4]
> list2[0] = [10, 100, 1000]
> print(list2)
[[10, 100, 1000], 1, 2, 3, 4]

리스트에 요소를 삽입하는 방법은 여러 가지가 있다.

list이름.insert(인덱스번호, 요소)

> list3 = [5, 4, 2, 1, 3]
> list3.insert(2, 7)
> print(list3)
[5, 4, 7, 2, 1, 3]

list이름.append(요소)

> list4 = [1, 3, 6, 4]
> new_element = [100, 200]
> list4.append(new_element)
> print(list4)
[1, 3, 6, 4, [100, 200]]

append()는 리스트를 넣을 경우 리스트 통째로 들어간다.

list이름.extend(요소)

> list5 = [1, 3, 6, 4]
> new_element = [100, 200]
> list5.extend(new_element)
> print(list5)
[1, 3, 6, 4, 100, 200]

리스트 다루기 - 삭제

del list이름[인덱스]

> list6 = [3, 1, 4, 5]
> del list6[0]
> print(c)
[1, 4, 5]
list이름.remove(요소)

> list7 = ['a', 'b', 'c']
> list7.remove('b')
> print(list7)
['a', 'c']
list이름.pop()

가장 마지막 원소를 제거한다. (LIFO: Last In First Out)


> list8 = [1, 10, 100, 1000]
> list8.pop()
> print(list8)
[1, 10, 100]

튜플 다루기 - 튜플 연산

튜플끼리 더하거나 곱해서 더 많은 원소 만들기 가능하다.

> tuple1 = (1, 2, 3, 4)
> tuple2 = (4, 3, 2, 1)
> print(tuple1 + tuple2)
> print(tuple1 * 3)
(1, 2, 3, 4, 4, 3, 2, 1)
(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)

다만 이런 연산이 원 튜플을 덮어쓰는 것은 아니다. 이런 연산은 리스트에서도 마찬가지로 원 리스트를 덮어쓰지 않는다.

> print(tuple1)
(1, 2, 3, 4)

원래 형태 그대로 출력된다.


튜플 다루기 - 튜플 함수

튜플이름.index(요소)

인자로 요소를 넣으면 해당 요소 인덱스 값을 반환한다. index 함수는 리스트에서도 쓸 수 있다.

> tuple3 = (3, 9, 85)
> print(tuple3.index(9))
2

set 다루기

  • set은 {1, 2, 3} 이렇게 표현된다.
  • set을 한국어로 하면 집합이라는 걸 이제 알았는데… 이름대로 수학 집합 원리를 생각하면 된다. 어떤 집합 안에서 원소 순서는 관계 없듯이 set도 요소끼리 순서가 없다.
  • 합집합, 교집합을 구할 때 양쪽 집합에 다 있는 원소는 하나만 표시되듯 set에서도 중복을 허용하지 않는다.

set 다루기 - 연산

> s1 = set([1, 2, 3, 4, 5, 6])
> s2 = set([4, 5, 6, 7, 8, 9])

  1. 교집합
> print(s1.intersection(s2))
> print(s1 & s2)
{4, 5, 6}
{4, 5, 6}

  1. 합집합
> print(s1.union(s2))
> print(s1 | s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}

  1. 차집합
> print(s1.difference(s2))
> print(s1 - s2)
{1, 2, 3}
{1, 2, 3}

set 다루기 - 삽입 / 삭제

set이름.add(값)
set이름.remove(값)

> s3 = set([7, 8, 9, 10])

> s3.add(12)
> print(s3)

> s3.remove(7)
> print(s3)
{7, 8, 9, 10, 12}
{8, 9, 10, 12}

딕셔너리 다루기

  • key는 중복 x, value는 중복 o
  • 없는 키를 조회하면 KeyError 발생
  • 안전하게 가져오기 위해서는 dict이름.get('key이름') 으로 가져오기. 이때 key가 없으면 None 리턴
> dict1 = {'name': 'Hi', 'age': 20}
> print(dict1['name1'])  # KeyError
> print(dict1.get('name1'))  # None

딕셔너리 다루기 - 삽입

dict이름[key이름] = 값

> dict1['region'] = 'Seoul'
> print(dict1)
{'name': 'Hi', 'age': 20, 'region': 'Seoul'}

딕셔너리 다루기 - 값 가져오기

> dict1.keys()  # 키만 가져오기
> dict1.values()  # 값만 가져오기
> dict1.items()  # 키-값 쌍 가져오기

> print(a.keys())
> print(a.values())
> print(a.items())
dict_keys(['name', 'age', 'region'])
dict_values(['Hi', 20, 'Seoul'])
dict_items([('name', 'Hi'), ('age', 20), ('region', 'Seoul')])

반환값 type은 리스트가 아니라 <class 'dict_keys'>로, 반복문 등에 사용하려면 리스트로 형변환을 해야한다.

list(dict1.values())

사용 예

# 키만 출력 (기본형)
for i in dict1:
  print(i)
name
age
region

# 이것도 키만 출력
for key in dict1.keys():
  print(key)
name
age
region

# 값만 출력
for value in dict1.values():
  print(value)
Hi
20
Seoul

# 키-값 출력
for key, value in dict1.items():
  print(key, value)
name Hi
age 20
region Seoul

참고) 헷갈려서 써놓은 장고 ORM
values_list는 장고 ORM이다. Model.objects.values_list('id', flat=True) 뭐 이렇게 쓰는…