안녕하세요!

Python set(집합), boolean(불리언) 본문

개발일지/python

Python set(집합), boolean(불리언)

shinyfood 2023. 11. 5. 00:35
728x90
반응형

 

집합(set)

  • 순서 및 중복이 없다.
  • 선언 방식 : set([ ])
  • 요소 접근시 list()로 변환해서 인덱스로 접근한다.

주의 해야할 점은 순서는 없지만, 분명히 실행될때의 순서는 존재한다는 점.

 

s1 = set([1, 2, 3, 4, 5])
s2 = set('Hello')
s3 = set([1, 2, 3, 4, 5, 5, 3])
s4 = set([1, 2, 2, 3])
print(s1, type(s1))
print(s2, type(s2)) #순서 없음
print(s3, type(s3)) #중복 없음
print(s4, type(s4)) #중복 없음
{1, 2, 3, 4, 5} <class 'set'>
{'H', 'e', 'o', 'l'} <class 'set'>
{1, 2, 3, 4, 5} <class 'set'>
{1, 2, 3} <class 'set'>

 

마찬가지로 type을 확인해보면 class의 set인걸 확인 가능하다.

print(list(s1)[0])
1

이런식으로 index 사용하여 확인 가능하다.

 

집합에 사용되는 연산

  • 교집합 : intersection (&)
  • 차집합 : difference (-)
  • 합집합 : union (|)
좌측상단부터 합집합, 교집합. 하단 두 개는 각 차집합이다.

 

특징에 서술했듯, 각 단어 또는 기호로 표현이 가능하다. 아래에 각 사용 예시를 보자.

 

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

{5, 6, 7, 8, 9, 10}
{5, 6, 7, 8, 9, 10}
#합집합
print (s1 | s2)
print (s1.union(s2))

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

합집합 및 교집합은 s1과 s2의 위치가 변하더라도, 결과가 변하지 않는다.

#차집합
print (s1 - s2)
print (s1.difference(s2))
print (s2 - s1)
print (s2.difference(s1))

{1, 2, 3, 4}
{1, 2, 3, 4}
{11, 12}
{11, 12}

위에 그림에서도 보이듯, 차집합은 s1이 주체인지 s2가 주체인지에 따라 결과물달라진다.

 

s1.add(11)
print(s1)

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

요소에 11을 집어넣어봤다.

s1.remove(4)
print(s1)

{1, 2, 3, 5, 6, 7, 8, 9, 10, 11}

마찬가지로 요소에서 4를 제거해봤다.

 

집합의 경우, 잘 사용하면 데이터의 분류시 굉장히 시간을 단축 시킬 수 있다.

 

불리언

  • 참(True)또는 거짓(False)을 나타내는 자료형 첫글자는 대문자
  • True인것들, False인것들

Java와 달리 대문자로 시작하는점을 꼭 기억하자!

 

가장 중요한 기초를 잡고가자면, java든 python이든 0은 False 나머지 수는 True다.

 

print('1' != 1)

True

'1' 같은 문자열표현의 숫자는 수와 다르다.

 

python에서 boolean은 &&나 ||를 사용하는게아닌 andor을 사용한다.

 

a = 3
b = 1

(a == b) and (++a >= b)

False

↑ ↓ 각 Fasle로 결과 값은 같지만 차이점이 존재한다.

(a >= b) and (a <= b)

False

위의 boolean은 and앞의 식이 False값이기때문에 뒷 식은 실행 되지 않지만, 아래의 식은 앞의 식이 True이므로 뒤의 식까지 실행이 된다.

(a >= b) or (a <= b)

True

or의 경우도 마찬가지로 앞의 식이 True가 나와버리면 뒤의 식은 확인 할 필요없이 True이므로 실행되지 않는다.

 

간단히말하자면,

 

  True , True True, False False, True False, False
False (True) 두 식 모두 실행 (False) 앞 식만 실행 (False) 앞 식만 실행 (False)
True 앞 식만 실행(True) 앞 식만 실행(True) 두 식 모두 실행(True) (False)

 

이렇게 생각하면 되겠다.

 

if of Python

  • 조건의 참, 거짓에 따라 동작 수행.
들여쓰기를 기준으로 실행된다. 아래는 if의 조건에 실행문1,2만 적용된다.
if 조건:
  실행문1
  실행문2
실행문3

if 조건:
  실행문
elif 조건:
  실행문
else:
  실행문

 

python의 제어문은... java의 제어문에 비하면 굉장히 짧다..

그리고 { } 으로 구분하는게아닌 들여쓰기구분하니 주의하자.

x = -1
if x >= 0:
    print('양수입니다.')
elif x < 0:
    print('음수입니다.')
else:
    print('숫자가 아닙니다.')

음수입니다.

 

또한 else if 가 아닌 elif 로 표현한다.

 

즉,

x = 3
 if x == 3: #if의 들여쓰기도 잘 맞춰야 한다.
    print('3입니다.')

IndentationError: unexpected indent

런식으로 if 앞에 빈칸이 생기면 인식하지 못해 에러가 발생한다.

 

b = 3
if b == 3:       #로직은 모르겠고~ 조건만 정해진경우에 사용하는 pass
    pass
print(b)

자바에서는 { }가 빈칸이여도 실행이 되는 반면, python에서는 빈칸으로 두면 에러가 발생한다.

그래서 pass를 사용하여 미리 틀만 구성해놓을 수 있다.

 

a = 1 
b = 2
c = -1
d = -2
e = 0

print(not a)
print(not b)
print(not c)
print(not d)
print(not e)

False
False
False
False
True

앞에서 언급했던 python에서 0은 False 나머지 수는 True다 를 확인해 봤다.

728x90
반응형