[SK shieldus Rookies 16기][Python] 튜플, 리스트, 딕셔너리

Jina·2023년 11월 1일
0

SK shieldus Rookies 16기

목록 보기
4/59
post-thumbnail
post-custom-banner

1. 튜플(tuple)

  • 불변 자료형 Read Only!
  • () 를 사용함, 정의할 땐 괄호를 붙이지 않음
  • 적은 메모리 공간을 사용
  • 딕셔너리 키로 사용이 가능
  • 함수의 파라미터는 튜플로 전달됨
  • 리스트 ↔ 튜플 간의 자료 변형 가능
abc_ = ()
def_ = []
print(type(abc_),type(def_)) # <class 'tuple'> <class 'list'>
 
 
eggs = ('hello', 42, 0.5)
print(eggs[0]) # hello
print(eggs[1:3]) # (42, 0.5)
print(len(eggs)) # 3

colors = 'red','green','blue','yellow'
print(type(colors)) # <class 'tuple'>
colors = ('red','green','blue','yellow')
print(type(colors)) # <class 'tuple'>
colors = '변수가 바뀐 것'
print(type(colors)) # <class 'str'>

# 리스트<->튜플 타입 변경가능
# 리스트는 read, write 가능, 튜플을 read만 가능하기 때문에 값을 변경하지 않는 경우에만 사용 가능
# tuple -> list
colors = 'red','green','blue','yellow'
list(colors)

# list -> tuple
colors = ['red','green','blue','yellow']
tuple(colors)

2. 리스트(List)

  • 가변 자료형
  • 데이터 타입, 인덱스를 통해 읽기/쓰기 지원 어떤 종류의 값도 담을 수 있음
  • 파이썬에서는 리스트에 정수,문자역,실수가 한 리스트에 포함될 수 있음
  • 리스트의 인덱스는 0번부터 시작
  • 슬라이싱이 가능

#리스트 범위 설정 후 출력
colors = ['red','blue','gold']
print(colors[0]) # red
print(colors[0:]) # ['red', 'blue', 'gold']
print(colors[1:3]) # ['blue', 'gold']
print(colors[1::-1]) # ['blue', 'red']

anything = [10,'텍스트',3.14]
print(anything[0])
print(anything[1])
print(anything[2])

# .insert() 리스트 요소 삽입
anything.insert(0,'insertTest')
print(anything)

# del 요소 삭제
del anything[2]
print(anything)

# 리스트 범위 설정 후 출력
colors = ['red','blue','gold']
print(colors[0])
print(colors[0:])
print(colors[1:3])
print(colors[1::-1])

# extend 리스트 끝에 항목을 추가한다.
colors.extend(['yellow','green'])
print(colors) # ['red', 'blue', 'gold', 'yellow', 'green']

# append
colors.append('black')
print(colors) # ['red', 'blue', 'gold', 'yellow', 'green', 'black']

# 리스트의 특정 인덱스에 값을 추가할 수 있다.
colors[2]='silver'
print(colors)
print(colors[2])
print(colors[0])

print(colors)
print(colors.index('blue'))
print(colors.index('yellow',1)) #값을 찾을 범위를 인덱스 위치로 지정할 수 있다.

append 와 extend의 차이점
append()는 이처럼 리스트 전체를 또 다른 엘리먼트로 처리한다. 반면 extend()는 삽입 대상의 리스트를 풀어서 각각의 엘리먼트로 확장(Extend)해 삽입한다.

#리스트 안에 리스트가 있으면 하나의 요소로 친다.
color1=['red', 'blue', 'gold', 'yellow', 'green', 'black']
color2=['red', 'blue', 'gold', 'yellow', ['green', 'black']]
print('color1의 길이는?',len(color1)) # color1의 길이는? 6
print('color2의 길이는?',len(color2)) # color2의 길이는? 5

# 해당 리스트가 있는지 확인 -> 각각의 요소를 확인하지 않는다.
print('red' in color2) # True
print(['red','yellow'] in color2) # False

리스트에서 요소 꺼내오기


# pop()
while len(colors) > 0:
    print(colors.pop())
    
# for
t = list(range(4))
print(t)
for i in t:
    print(i)


# 리스트 길이만큼 반복문 실행
supplies = [
    'pens','staplers','flamethroewer','binders'
]
for i in range(len(supplies)):
    print(f'index{i} in suppliesis : {supplies[i]}')
    
# enumerate를 이용해 리스트를 인덱스,값을 함께 출력
list(enumerate(supplies))

# enumerate를 이용한 for문
for i,supply in enumerate(supplies):
    print(f'index {i} in supplies is : {supply}')


cat = ['fat','gray','loud']
size = cat[0]
color = cat[1]
disposition = cat[2]
print(size,color,disposition) # fat gray loud

# 위와 아래는 같은 결과지만 아래가 더 간단하므로 아래와 같은 방식을 지향하도록 한다.
cat = ['fat','gray','loud']
size,color,disposition = cat #리스트를 튜플 방식으로 언팩킹 가능하다.
print(size,color,disposition)

inline for문을 사용하여 요소를 꺼내올 수도 있다.

prices_list = [1,2,3]
result = [print(item) for item in prices_list]
# 1
# 2
# 3

inline for문 사용 시 주의사항
result = [None] 이므로 result 가 생략되면 값 출력 후 [None,None...] 이 함께 출력되버린다.

3. 딕셔너리(Dictionary)

  • 리스트와 유사하지만 인덱스 대신에 키를 통해 값을 찾음
  • 여러 값의 모음으로 가변 자료형
  • key 딕셔너리의 인덱스, 다양한 자료형 사용 가능
  • key : value 형태
  • 슬라이싱 X
test_dict = {'이름':'홍길동', '나이':2, '직업':'의적'}
print(test_dict) # {'이름': '홍길동', '나이': 2, '직업': '의적'}

딕셔너리 값 변경

test_dict = {'이름':'홍길동', '나이':2, '직업':'의적'}
# 키가 '이름'인 것을 찾아 값을 변경
test_dict['이름'] = '김아무개'
print(test_dict) # {'이름': '김아무개', '나이': 2, '직업': '의적'}
# 빈 딕셔너리에 키와 값을 넣을 수 있다.
aaa = {}
aaa['pos']=1
aaa['toc']=2
print(aaa)

setDefault() 딕셔너리 기본값 설정

딕셔너리에 key만 있고 value가 없는 경우 기본값 설정 가능

d = {'one': 1, 'two': 2, 'three': 3}
print(d.setdefault('one')) # 1
d.setdefault('four',4) # four : 4
print(d.setdefault('four')) # 4

del 딕셔너리에서 요소 삭제

aaa = {'pos':1,'toc':2}
del aaa['pos']
print(aaa) # {'toc': 2}
# 딕셔너리 aaa에 'pos' 가 있으면 삭제하는 조건문
if aaa.get('pos'):
    print('지울게')
    del aaa['pos']
else:
    print('지울게 없음')

items() 딕셔너리에서 요소 찾기

ham = {'spec':'cat', 'name':'bom', 'age':8}

# 딕셔너리에 있는 key-value를 리스트 형태로 가져오기
print(list(ham.items()))
# [('spec', 'cat'), ('name', 'bom'), ('age', 8)]

# 딕셔너리에 있는 key-value을 for문으로 가져오기(1)
for item in ham.items():
    print(item) 
# ('spec', 'cat')
# ('name', 'bom')
# ('age', 8)

# 딕셔너리에 있는 key-value을 for문으로 가져오기(2)
for k,v in  ham.items():
    print(k,v)
# spec cat
# name bom
# age 8

딕셔너리 사용 시 주의사항
dict 를 변수명으로 사용하지 말 것!
dict() 함수가 따로 있기 때문에 dict를 변수명으로 사용해버리면 함수를 사용할 수 없게 된다. 만약 함수명을 변수명으로 사용해버렸다면 del 변수명 으로 변수를 삭제해주자.

keys() / values()

딕셔너리에 key나 value의 존재 여부 True, False로 확인 가능

ham = {'spec':'cat', 'name':'bom', 'age':8}
print('name1' in ham.keys()) # False
print('cat' in ham.values()) # True

for문으로 사용하면 딕셔너리의 key 또는 value만 꺼낼 수 있다.

# 딕셔너리의 key/value를 꺼내오기
prices_dict = {1:'mango',2:'apple',3:'banana'}

for item in prices_dict.items():
    print(item)
# (1, 'mango')
# (2, 'apple')
# (3, 'banana')

for k in prices_dict.keys():
    print(k)
# 1
# 2
# 3

for v in prices_dict.values():
    print(v)
# mango
# apple
# banana

4. call by value

  • 복사한 값을 전달하는 방식
  • 불변형 타입(정수형,문자형,튜플)

5. call by reference

  • 복사한 주소값을 전달하는 방식
  • 가변형 타입(리스트,딕셔너리)
spam = [1,2,3,4,5]
cheese = spam
print(cheese,spam) # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

# cheese와 spam은 같은 주소를 가리키고 있기 때문에 동일하게 출력된다.
cheese[1] = 'hello'
print(cheese, spam) 
# [1, 'hello', 3, 4, 5] [1, 'hello', 3, 4, 5]
# 리스트의 주소가 아닌 값을 카피하기 위해서는 copy 모듈이 필요하다.
import copy 

spam = [1,2,3,4,5]
cheese = copy.copy(spam) # copy패키지 안 copy()를 사용 -> 다른 주소에 spam의 리스트를 카피한다.
print(spam, cheese) # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

cheese[1]='치즈'
print(spam, cheese) # [1, 2, 3, 4, 5] [1, '치즈', 3, 4, 5]
# cheese와 spam은 다른 주소를 가리키고 있기 때문에 서로 다른 리스트를 출력한다.
profile
공부 기록
post-custom-banner

0개의 댓글