[점프투파이썬] 2장 자료형 정리

해롱그·2023년 5월 28일
0

파이썬

목록 보기
1/12
post-thumbnail

리스트 a=[1,2,3] []
튜플 b=(1,2,3) ()

둘의 차이점은?
리스트는 수정 가능, 튜플은 수정 불가능(고정된 것)

*튜플의 핵심!!
인덱싱, 슬라이싱은 가능함. 값을 변화시키는 것이 안될뿐..

a=(1, 2)
a = a+(3, 4)
print(a)
>>> (1, 2, 3, 4)

이건 튜플 값을 하나하나 변경하는 것이 아니라 변수 a 자체에 새로운 값을 넣는 것이므로 a값이 바뀐 것!

딕셔너리(dictionary)

  • 리스트로 하나씩 살펴보는 것이 아니라 키로 검색해서 키에 따른 값을 볼 수 있는 자료형 {}
  • Key를 통해 Value를 얻는다 (키-값)
  • 연관 배열(Associative array) 또는 해시(Hash)
>>> dic = {'name':'pey', 'phone':'0123456789', 'birth':'1118'}
  1. 키는 중복되면 안됨 (마지막 키와 밸류만 남음)
a = {1: 'hi', 1:'b'}
print(a)

>>> {1: 'b'}
  1. key와 value 각각 리스트 뽑기
# 키 뽑기
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
print(a.keys())

>>> dict_keys([1, 2, 3])

# 밸류 뽑기
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
print(a.values())

>>> dict_values(['파랑구름', '이현주', '민Min'])

# 키에 따른 값끼리 뽑기
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
print(a.items())

>>> dict_items([(1, '파랑구름'), (2, '이현주'), (3, '민Min')])  

# for문에 적용
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
for k, v in a.items():
    print("key: " + str(k))
    print("value: " + v)
    
>>> key: 1
	value: 파랑구름
	key: 2
	value: 이현주
	key: 3
	value: 민Min

# 딕셔너리 비우기
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
a.clear()
print(a)

>>> {}

# get 활용하기 (대괄호 했을 떄: Key Error / get: None)
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
print(a.get(4))
print(a[4])

>>> None
	KeyError: 4
    
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
print(a.get(4, '없음'))

>>> 없음

# in
a = {1: '파랑구름', 2:'이현주', 3:'민Min'}
print(1 in a)
print(4 in a)

>>> True
	False

집합

  • 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형
  • 중복된 요소를 가질 수 없음 (고유한 원소)
  • 순서가 없음
  • set([]): 리스트틑 set에 넣으면 집합!!
  • {}
    주로 사용되는 예시
l=[1,2,2,3,3,3]
newList = list(set(l)) -> 중복 제거 후 다시 리스트로 만들어주는 과정
print(newList)

>>> [1, 2, 3]

# 문자열을 set으로 감싸면 쪼개짐
s1 = set("Hello")
print(s1)

>>> {'e', 'o', 'H', 'l'}

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

>>> {4, 5, 6}

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

>>> {1, 2, 3, 4, 5, 6, 7, 8, 9}

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

>>> {1, 2, 3}
  • 집합은 튜플과 달리 값 추가 가능
# 값 하나 추가
s1 = set([1,2,3,4,5,6])
s1.add(7)
print(s1)

>>> {1, 2, 3, 4, 5, 6, 7}

# 여러개 값 추가
s1 = set([1,2,3,4,5,6])
s1.update([7, 8])
print(s1)

>>> {1, 2, 3, 4, 5, 6, 7, 8}

# 집합에 원래 있는 값 포함해서 추가할 경우
s1 = set([1,2,3,4,5,6])
s1.update([7, 8, 1])
print(s1)

>>> {1, 2, 3, 4, 5, 6, 7, 8} -> 원래 들어있던 1은 제외되고 나머지만 들어간다!!

# 특정 값 제거
s1 = set([1,2,3,4,5,6])
s1.remove(1)
print(s1)

>>> {2, 3, 4, 5, 6}

불(True&False)

  • 참과 거짓

if a==3:
print(a)
while a==3:
a+=1

a=True
print(type(a))

>>> <class 'bool'>

a = [1, 2, 3, 4]
while a:
    a.pop()
    print(a)
    
>>> [1, 2, 3]
	[1, 2]
	[1]
	[]

변수

  • 파이썬에서 사용하는 변수는 객체를 가리키는 것
    >>> a=3
    - 3이라는 값을 가지는 정수 자료형(객체)이 자동으로 메모리에 생성
    - 변수 a는 객체가 저장된 메모리의 위치를 가리키는 레퍼런스(Reference)
    - a라는 변수는 3이라는 정수형 객체를 가리키고 있다
#id를 찍어서 주소값 확인
a = [1, 2, 3, 4]
b=a
a[1]=4
print(id(a))
print(id(b))

>>> 4367859264
	4367859264

#is 사용하여 같은 주소인지 확인
a = [1, 2, 3, 4]
b=a
a[1]=4
print(a is b)

>>> True

#a 리스트를 b에 그대로 복사하고 싶은 경우
a = [1, 2, 3, 4]
b = a[:] -> 슬라이싱 해서 그대로 넣어주기!
a[1]=4
print(a)
print(b)

>>> [1, 4, 3, 4]
	[1, 2, 3, 4]
    
또는

from copy import copy
a = [1, 2, 3, 4]
b = copy(a)
a[1]=4
print(a)
print(b)

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

변수 할당하는 여러가지 방법

1.
a,b = ('Python', 'life') -> 괄호는 생략해도 됨, or 앞쪽에 괄호 넣고 뒤에는 표시 안해도 됨, `[]`도 가능
print(a)
print(b)

>>> Python
	life

2. 
a = b = 'hello'
print(a)
print(b)

>>> hello
	hello
*java에서는 a, b = 'hello'

3. 일반적으로 a와 b를 바꾸는 과정
a = 3
b = 5
tmp = b
b = a
a = tmp
print(a, b)

>>> 5 3

그러나 파이썬에서는 엄청 편한 방법이 존재한다!
a = 3
b = 5
a, b = b, a
print(a, b)

>>> 5 3

Reference
참고한 영상

profile
사랑아 컴퓨터해 ~

0개의 댓글