[파이썬] 집합, 불, 변수

osdsoonhyun·2022년 1월 27일
0

파이썬

목록 보기
4/10
post-thumbnail

집합의 핵심

중복된 요소를 가질 수 없다 각각의 요소가 고유하다

집합 자료형

  • 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형
  • 중복을 허용하지 않는다
  • 순서가 없다(Unordered)
>>> s1 = set([1,2,3])
>>> print(s1)
{1,2,3} // 집합 자료형

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

set으로 배열을 감싸서 정의해도 되고 아니면 {중괄호}로 감싸서 집합을 정의해도 된다
주로 데이터 관련해서 많이 쓴다 (중복된 데이터 지울 때)

>>> l = [1,2,2,2,3,3]
>>> newList = list(set(l)) // 중복을 지우고 다시 리스트로 만듦
>>> print(newList)
[1,2,3]

교집합(&, intersection)

>>> s1 = set([1,2,3,4,5,6])
>>> s2 = set([4,5,6,7,8,9])
>>> print(s1 & s2)
{4,5,6}
>>> print(s1.intersection(s2))
{4,5,6}

합집합(|, union)

>>> s1 = set([1,2,3,4,5,6])
>>> s2 = set([4,5,6,7,8,9])
>>> print(s1 | s2)
{1,2,3,4,5,6,7,8,9}
>>> print(s1.union(s2))
{1,2,3,4,5,6,7,8,9}

차집합(-, difference)

>>> s1 = set([1,2,3,4,5,6])
>>> s2 = set([4,5,6,7,8,9])
>>> print(s1 - s2)
{1,2,3}
>>> print(s1.difference(s2))
{1,2,3}
>>> print(s2.difference(s1))
{7,8,9}

값 1개 추가하기(add)

>>> s1 = set([1,2,3])
>>> s1.add(4) //add를 해줌으로써 s1이 변화하는거지 결과 리턴은 x
>>> print(s1)
{1,2,3,4}

값 여러 개 추가하기(update)

>>> s1 = set([1,2,3])
>>> s1.update([4,5,6])
>>> print(s1)
{1,2,3,4,5,6}

불(bool)

숫자 문자열처럼 Ture,False 참과 거짓인 값으로 되어 있다
참(True), 거짓(False)
첫 알파벳을 대문자로 써야한다

>>> a = True
>>> print(a)
True
>>> print(type(a))
'bool' 

자료형의 참과 거짓

참 or 거짓
"python"(문자열)
""거짓
1,2,3
[]거짓
() (튜플)거짓
{} (딕셔너리)거짓
1
0거짓
None거짓

for문이나 while 반복문에서 알고 있으면 유용하게 사용된다

변수

자료형의 값을 저장하는 공간

변수 : a
메모리: 주소 2026043360 값: 1(객체)

>>> a = 1
>>> b = 'python'
>>> c = [1,2,3]

변수를 만들 때는 =(assignment) 기호를 사용한다

파이썬에서 사용하는 변수는 객체를 가리키는 것

>>> a = 3
  • 3이라는 값을 가지는 정수 자료형(객체)이 자동으로 메모리에 생성
  • 변수 a는 객체가 저장된 메모리의 위치를 가리키는 레퍼런스(Reference)
  • a라는 변수는 3이라는 정수형 객체를 가리키고 있다
    객체는 class를 이용하여 만든 것 간단히 말해서 자료형이라 보면 된다
    숫자, 문자열 자료형에 .을 써서 함수 사용한 것처럼 객체가 있으면 method를 이용해서 함수 적용 가능
    숫자형 자료형 객체를 a라는 상자에 넣은 것
>>> a = {1,2,3}
>>> b = a // a의 주소를 b에 넣은 것 a,b는 같은 것을 바라본다
>>> a[1] = 4
>>> print(a)
[1,4,3]
>>> print(b)
[1,4,3]

주소개념설명

헷갈릴수 있는 부분이 b = a이므로 b를 출력하면 a[1]를 바꾸기 전 값인
[1,2,3]로 나올 것 같지만, b 는 a의 주소 값을 받아왔기에 a,b모두 [1,4,3]이 나온 것이다
'주소를 가지고 있는다'라는 개념을 알고 있을 것

>>> a = [1,2,3]
>>> b = a
>>> print(a[1]) 
4
>>> print(id(a)) // a의 주소
45559192
>>> print(id(b)) // b의 주소
45559192
>>> print(a is b) // a와 b가 같은 주소인가?
True 

a = [1,2,3]을 그대로 b한테 주고 b의 값을 변하지 않게 하고 싶을 땐

>>> a = [1,2,3]
>>> //b = a는 a의 주소를 준 것
>>> b = a[:] // 새로운 게 따져서 들어간 것
>>> a[1] = 4
>>> print(a)
[1,4,3]
>>> print(b)
[1,2,3]
>>> print(id(a))
51256712
>>> print(id(b)) //새로운 값이 복사가 되어서 들어갔다
51422888

[:] 리스트를 처음부터 끝까지 슬라이싱해서 그 값을 넘겨준다
즉, 슬라이싱하면 새로운 [1,2,3]이라는 리스트가 생겨서 그것을 넣는 것

>>> from copy import copy // 밖에 있는 라이브러리를 가져온 것
>>> a = [1,2,3]
>>> b = copy(a) //새로운 메모리 즉 새로운 주소에 값을 복사해서 넣은 것, 복사한 것을 b에게 할당한 것
>>> a[1] = 4
>>> print(a)
[1,4,3]
>>> print(b)
[1,2,3]
>>> print(id(a))
51256712
>>> print(id(b)) //새로운 값이 복사가 되어서 들어갔다
51422888

주소개념설명2
copy를 쓰면 슬라이싱한 것과 마찬가지로 a리스트 주소를 주는게 아니라 값을 복사해서 리스트를 b한테 새롭게 할당시킨다

변수를 만드는 여러가지 방법

>>> a,b = ('python', 'life')
>>> print(a)
python
>>> print(b)
life

다른 언어에서 보기 힘든 파이썬에서 신기한 기능

>>> a = 3
>>> b = 5
//a,b를 교체할 때 다른 언어에서는 tmp를 두어 
// tmp = a
// a = b
// b = tmp
// 그러나 파이썬에서는 직관적으로
>>> a,b= b,a
>>> print(a)
5
>>> print(b)
3

끝으로 c언어에서 조금은 귀찮고 신경 써야했던 부분들이 파이썬에서는 아주 간단하게 직관적으로 해결할 수 있는 것을 보고 재밌고 잘 활용하면 훨씬 편하고 간단해질 것 같다🤓

0개의 댓글