6 분 소요


1. list

변경 가능한 자료형으로, 다양한 데이터 타입의 항목 포함 가능

  • 다양한 자료형을 갖는 item 을 보관하는 자료구조
  • 🚨 리스트 안에는 어떠한 자료형도 포함할 수 있다.


1.1 리스트 생성

a=[]
print(a) # []

b=[1,2,3]
print(b) # [1, 2, 3]

c=["Life","is","too","short"]
print(c) # ['Life', 'is', 'too', 'short']

d=[1,2,"Life","is"]
print(d) # [1, 2, 'Life', 'is']

e=[1,2,["Life","is"]]
print(e) # [1, 2, ['Life', 'is']]


1.2 리스트 인덱싱

문자열 사용법과 동일

a=[1,2,3]

print(a[0]) # 1
print(a[-1]) # 3

b= a[0]+a[2]
print(b) # 4

a=[1,2,3,["a","b","c"]]

b=a[3]
print(b) # ['a', 'b', 'c']

b=a[-1]
print(b) # ['a', 'b', 'c']

b=a[-1][0]
print(b) # a

b=a[-1][1]
print(b) # b

b=a[-1][2]
print(b) # c


1.3 리스트 슬라이싱

문자열 사용법과 동일

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

print(a[0:2]) # [1, 2]
print(a[:2]) # [1, 2]
print(a[2:]) # [3, 4, 5]

a=[1,2,3,["a","b","c"],4,5]
print(a[2:5]) # [3, ['a', 'b', 'c'], 4]
print(a[3][:2]) # ['a', 'b']


1.4 리스트 연산하기

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

# 더하기
print(a+b) # [1, 2, 3, 4, 5, 6]

# 곱하기
print(a*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]

# 길이 구하기
print(len(a)) # 3


1.5 리스트의 수정과 삭제

# item 수정하기
a=[1,2,3]
a[2]=4
print(a) # [1, 2, 4]

# item 삭제하기(del 함수 이용)
a=[1,2,3]
del a[1]
print(a) # [1, 3]

a=[1,2,3,4,5]
del a[2:]
print(a) # [1,2]


1.6 리스트 관련 함수

⚠️ pop은 인덱스를 기준으로, remove는 요소로 item을 제거할 수 있다.

# item 제거 - remove
# ! 여러 개 있으면, 첫 번째 item만 제거
# * 인덱스 값이 아닌 요소 값으로 판단
a=[1,2,3,1,2,3]
a.remove(3)
print(a) # [1, 2, 1, 2, 3]

# 특정 위치의 item 빼내기 - pop
a=[1,2,3]
a.pop() # 마지막 요소를 삭제
print(a) # [1, 2]

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

a=[1,2,3]
a.pop(0) # 첫 번째 요소를 삭제
print(a) # [2, 3]


⚠️ append()하나의 인자만 받을 수 있다. 여러 개의 인자를 받고 싶으면 extend() 를 사용해야 한다.

# item 추가하기 - append
a=[1,2,3]
a.append(4)
print(a) # [1, 2, 3, 4]

a.append([5,6])
print(a) # [1, 2, 3, 4, [5, 6]]

# 정렬 - sort
# * 유니코드 기반 정렬
a=["a","c","b"]
a.sort()
print(a) # ['a', 'b', 'c']

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

# 순서 뒤집기 - reverse
# ! reverse은 정렬과 무관하다.
a=["a","c","b"]
a.reverse()
print(a) # ['b', 'c', 'a']

# 인덱스 반환 - index
a=[1,2,3]
print(a.index(3)) # 2
print(a.index(1)) # 0
# print(a.index(6)) # ! index에 값이 존재하지 않으면 error

# 특정 위치에 item 삽입 - insert
a=[1,2,3]
a.insert(0,4) # 리스트의 0번째 위치에 4를 삽입
print(a) # [4, 1, 2, 3]

a=[4, 1, 2, 3]
a.insert(3,5)
print(a) # [4, 1, 2, 5, 3]

# 특정한 item 개수 세기 - count
a=[1,2,3,1]
print(a.count(1)) # 2
print(a.count(2)) # 1

# 확장 - extend
# ! 함수의 인자는 리스트만 가능  --> 교재가 틀림 tuple, dict도 들어가긴 함
a=[1,2,3]
a.extend((4,5))
print(a) # [1, 2, 3, 4, 5]

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



2. tuple

⭐ 리스트는 item의 생성, 삭제, 수정이 가능하지만, 튜플은 불변하기 때문에 item을 변경할 수 없다 -> 불변성(immutable)

  • 리스트와 유사하지만, 튜플은 (), 리스트는 []
  • 리스트와 달리 t2=(1,) 처럼 단지 1개의 요소만을 가질 떄는 요소 뒤에 쉼표(,)를 반드시 붙여야 한다.
  • t4=1,2,3 처럼 소괄호(())를 생략해도 된다.
# TODO: 튜플의 생성
t1 = ()
print(t1)  # 출력: ()

t2 = (1,)
print(t2)  # 출력: (1,)  -> 튜플의 요소가 하나일 때는 뒤에 콤마를 붙여줘야 튜플로 인식됨

t3 = (1, 2, 3)
print(t3)  # 출력: (1, 2, 3)

t4 = 1, 2, 3  # 소괄호 생략 가능
print(t4)  # 출력: (1, 2, 3)

t5 = t1 = (1, 2, "a", "b")
print(t5)  # 출력: (1, 2, 'a', 'b')  -> t1에 튜플이 할당되고, t5도 동일한 튜플을 참조함

t6 = ("a", "b", ("ab", "cd"))
print(t6)  # 출력: ('a', 'b', ('ab', 'cd'))  -> 튜플 안에 또 다른 튜플이 포함됨

# ! 튜플은 불변하기 때문에 아래 코드는 오류 발생
# del t1[0]
# t1[0]="c"

# TODO: 튜플 인덱싱
t1=(1,2,"a","b")
print(t1[0]) # 1
print(t1[3]) # b

# TODO: 튜플 슬라이싱
t1=(1,2,"a","b")
print(t1[1:]) # (2, 'a', 'b')

# TODO: 튜플 더하기
t1=(1,2,"a","b")
t2=(3,4)
t3=t1+t2
print(t3) # (1, 2, 'a', 'b', 3, 4)

# TODO: 튜플 곱하기
t2=(3,4)
t3=t2*3
print(t3) # (3, 4, 3, 4, 3, 4)

# TODO: 튜플 길이 구하기
print(len(t1)) # 4



3. dictionary

Key와 Value를 한 쌍으로 가지는 자료형

  • 리스트나 튜플처럼 순차적으로 해당 item을 구하지 않고 Key를 통해 Value를 획득
  • key가 중복으로 존재할 수 없다.


3.1 딕셔너리 생성

# 딕셔너리의 생성
a={"name":"pey","phone":"010-1234-5678","birth":"1118"}
b={1:"hi"}
c={"a":[1,2,3]}

print(a) # {'name': 'pey', 'phone': '010-1234-5678', 'birth': '1118'}
print(b) # {1: 'hi'}
print(c) # {'a': [1, 2, 3]


3.2 item 추가 및 삭제

⚠️ 딕셔너리에서 a[2] = "b"라고 할 때, 2는 인덱스가 아니라 “키(key)”이다.

# TODO: item(pair) 추가하기
a={1:"a"}
a[2]="b"
print(a) # {1: 'a', 2: 'b'}

a["name"]="pey"
print(a) # {1: 'a', 2: 'b', 'name': 'pey'}

a[3]=[1,2,3]
print(a) # {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}

# TODO: item(pair) 삭제하기
a={1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
del a[1] # 딕셔너리에서 del 함수는 키 제거
print(a) # {2: 'b', 'name': 'pey', 3: [1, 2, 3]}


3.3 key를 이용하여 Value 구하기

🚨 key는 immutable 한 것만 가능 -> 따라서, 튜플은 key로 가능하나 리스트는 불가능하다.⭐⭐

딕셔너리의 key 사용 여부는 key가 immutable 여부에 따라 다르다.

grade={"pey":10,"julliet":99}
a=grade["pey"]
b=grade["julliet"]

print(a) # 10
print(b) # 99

a={1:"a",2:"b"}
print(a[1]) # a
print(a[2]) # b

a={"a":1,"b":2}
print(a["a"]) # 1
print(a["b"]) # 2

# 튜플을 key로 사용
a={("a",):1,("b",):2}
b=a[("a",)]
c=a[("b",)]
print(b) # 1


🚨 중복되는 key를 사용하면 기존의 것은 무시되고 새로운 key:value로 설정된다.

# ! 중복되는 key를 사용하면 기존의 것은 무시되고 새로운 key:value로 설정된다.
a={1:"a",1:"b"}
print(a) # {1: 'b'}

# ! a가 정의되지 않은 상태에서 사용되어 오류 발생
# a={1:"a",a:"b"}
# print(a)

# ! 리스트는 key를 사용할 수 없으므로 오류 발생
# a={[1,2]:"hi"}
# print(a)


3.4 딕셔너리 관련 함수(1) - keys

⚠️ a.keys() 로 얻은 키들을 for 문에서 묶으면 리스트로 나온다. (키만 따로 반환하므로 튜플로 묶어줄 필요가 없다.)

# key 리스트 만들기 - keys
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
print(a.keys()) # dict_keys(['name', 'phone', 'birth'])

b=list(a.keys())
print(b) # ['name', 'phone', 'birth']

# * 기억할 사항
for k in a.keys():
    print(k)
# name
# phone
# birth


3.5 딕셔너리 관련 함수(2) - values, get

# value 리스트 만들기 - values
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
print(a.values()) # dict_values(['pey', '010-1234-5678', '1118'])

b=list(a.values())
print(b) # ['pey', '010-1234-5678', '1118']

# key로 value 구하기 - get
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}

b=a.get("name")
print(b) # pey

b=a["name"]
print(b) # pey

b=a.get("nokey")
	print(b) # None, 에러는 나지 않음


# ! 딕셔너리 a에 "nokey"라는 키가 존재하지 않기 때문에 오류 발생
# b=a["nokey"]
# print(b)

# ! 따라서 아래와 같이 변경해줘야함.
b=a.get("nokey","foo") # key가 없는 경우, "foo" 반환
print(b) # foo


3.6 딕셔너리 관련 함수(2) - items, clear

a.items()는 각 **키-값 쌍이 튜플로 묶여서 전체가 리스트 형태로 반환된다.

튜플은 불변 자료형이기 때문에 각 키-값 쌍이 pair가 되도록 안전하게 묶어주는 역할을 한다.

# item 구하기 - items (Key, Value pair 구하기)
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
print(a.items()) # dict_items([('name', 'pey'), ('phone', '010-1234-5678'), ('birth', '1118')])

b=list(a.items())
print(b) # [('name', 'pey'), ('phone', '010-1234-5678'), ('birth', '1118')]

# item 지우기 - clear (Key, Value pair 지우기)
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
a.clear()
print(a) # {}


3.7 딕셔너리 관련 함수(2) - in

# key 존재 여부 조사 - in
b="name" in a
print(b) # True

b="email" in a
print(b) # False



4. set

🚨 중복 불가. 순서가 없다. (리스트, 튜플은 순서가 있음)

  • set은 중복을 허용하지 않는 특징 때문에 데이터의 중복을 제거하기 위한 필터로 종종 사용
  • 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후에 해야 한다.


4.1 set 생성

s1=set([1,2,3])
print(s1) # {1, 2, 3}

s2=set("Hello")
print(s2) # {'l', 'e', 'o', 'H'}


4.2 set 인덱싱과 슬라이싱

🚨 set은 순서가 없는 자료형이기 때문에 인덱싱과 슬라이싱이 불가능하다!
따라서 listtuple 로 변환한 후 인덱싱과 슬라이싱을 수행해야 한다.

s1=set([1,2,3])
t1=list(s1)

print(t1) # [1, 2, 3]
print(t1[0]) # 1

t1=tuple(s1)
print(t1) # (1, 2, 3)
print(t1[0]) # 1


4.3 교집합, 합집합, 차집합

# 교집합
s1=set([1,2,3,4,5,6])
s2=set([4,5,6,7,8,9])

a=s1 & s2
print(a) # {4, 5, 6}

a=s1.intersection(s2)
print(a) # {4, 5, 6}

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

a=s1 | s2
print(a) # {1, 2, 3, 4, 5, 6, 7, 8, 9}

a=s1.union(s2)
print(a) # {1, 2, 3, 4, 5, 6, 7, 8, 9}

# 차집합
a=s1-s2
print(a) # {1, 2, 3}

a=s1.difference(s2)
print(a) # {1, 2, 3}

a=s2-s1
print(a) # {8, 9, 7}

a=s2.difference(s1)
print(a) # {8, 9, 7}


4.4 set 관련 함수

# TODO: 집합 자료형 관련 함수
# item 1개 추가 - add
s1=set([1,2,3])
s1.add(4)
print(s1) # {1, 2, 3, 4}

# item 여러 개 추가 - update
s1=set([1,2,3])
s1.update([4,5,6])
print(s1) # {1, 2, 3, 4, 5, 6}

# item 제거 - remove
s1=set([1,2,3])
s1.remove(2)
print(s1) # {1, 3, 4, 5, 6}


카테고리:

업데이트:

댓글남기기