TIL - Python - 논리 연산자&문자열 사용&리스트와 튜플&시퀀스 자료형&딕셔너리
# 불(bool), 연산자
- 불(
bool
) 자료형은 참(True
), 거짓(False
)을 나타내는 자료형이다
print(bool(1)) # 결괏값: True
print(bool('abcd')) # 결괏값: True
print(bool(0)) # 결괏값: False
print(bool(None)) # 결괏값: False
- 비교 연산자(
>
,<
,<=
,>=
)
print(10 > 20) # 결괏값: False
print(10 < 20) # 결괏값: True
print(10 >= 20)
print(10 <= 20)
- 논리 연산자(
==
,!=
) *==
=__eq__
print('Python' == 'python') # 결괏값: False
print('Python' != 'python') # 결괏값: True
print('Python' != 'Python')
print('Python'.__eq__('python')) # 결괏값: False
- 객체 동일성 비교(
is
,is not
)
a = 5
b = 5
print(a is b) # 결괏값: True
- 객체 동일성 비교(
id()
)
* immutable 객체:tuple
,str
, 숫자(int
,float...
) ▶ '값'이 같으면(==
) 'id값' 동일(=
)
a = 5
b = 5
print(id(a))
print(id(b)) # 객체가 동일하면 id값도 동일하다
-
and
,or
,is
(객체 동일성)vs==
(값)and
: 조건 모두 만족할 때True
or
: 조건 중 하나만 만족해도 'True`not
: 결과 값의 반대를 출력
print(10 == 10 and 1 == True) # True
print(10 > 3 or 0 is False) # True ✔
print(not 10 > 5) # False
print(not 1 == 1.0) # False ✔
print(not 1 is 1.0) # True ✔
# 문자열 사용하기
-
'
(작은 따옴표),"
(큰 따옴표),'''
(작은 따옴표 3개),"""
(큰 따옴표 3개)로 묶어서 출력 -
여러 줄로 된 문자열(multiline string)
'''
(작은 따옴표 3개) or"""
(큰 따옴표 3개) 사용
print('''해당 상품 재고가
남아있지 않습니다.
재입고를 기다려주세요.
''')
- 문자열 안에 작은 따옴표나 큰 따옴표 포함하기
print('''"안녕하세요."
'파이썬'입니다.''')
print(""""Hello"
'Python'""")
print("""Hello, 'Python'""")
- "작은 따옴표" 안에 "작은 따옴표" 출력하기
- 이스케이프 코드
\'
을 사용
- 이스케이프 코드
print('Python isn\'t difficult')
- 작은 따옴표 or 큰 따옴표 사용하지 않고 multiline으로 출력하기:
\n
사용
print('Python isn\'t \ndifficult')
# 리스트
-
문자열, 정수, 실수, 불(bool) 등 모든 자료형을 저장할 수 있는 자료 구조
-
리스트에 저장된 각 값은 요소(element)라고 부른다.
person = ['james', 17, 175.3, True]
range
를 사용하여 리스트 만들기 *a=list(): 비어있는 리스트 생성
a = list(range(10))
print(a)
-
range
- range(start, stop, step) *step: 증가폭
- 증가폭은 음수로 설정 가능
- range(start, stop, step) *step: 증가폭
a = range(11, -4, -1)
print(list(a))
-
리스트 안에 문자열을 넣으면?
- 문자열 하나하나가 리스트의 요소(element)로 들어감
# 튜플
-
저장된 요소(element)를 변경, 추가, 삭제할 수 없는 불변형 자료 구조
-
리스트처럼 문자열, 정수, 실수, 불(bool) 등 여러 자료형 저장 가능
a = 10, False, 'b' ***
b = (10, False, 'b')
print(type(a)) # <class 'tuple'>
print(type(b)) # <class 'tuple'>
print(a is b) # True
- 요소가 한 개 들어있는 튜플
a = (3,)
print(type(a)) # <class 'tuple'>
range
를 사용하여 튜플 만들기 *a=tuple(): 비어있는 리스트 생성
a = tuple(range(10))
print(a)
- unpacking
a, b, c = [1, 2, 3]
print(a, b, c, sep='\n') # a = 1, b = 2, c = 3 각각 할당
** # unpacking의 또 다른 예시 a, b = map(int, input().split())
# 시퀀스 자료형
-
연속적으로 이뤄진 자료형(sequence types)
-
list
,tuple
,range
,str
,bytes
,bytearray
-
시퀀스 객체 특징
-
특장 값 있는지 여부를 확인 가능(
in
ornot in
)a = [0, 10, 20, 30, 40, 50] print(35 not in a) # True print(-3 in range(10, -6, 2)) # False
-
시퀀스 객체를 서로 연결 가능(range는 예외)
a = [0, 10, 20] b = [9, 8, 7] print(a+b) # [0, 10, 20, 9, 8, 7] c = 'snow' d = 'ball' print(c+d) # snowball
-
반복 가능
*
연산자는 시퀀스 객체를 특정 횟수만큼 반복하여 새로운 시퀀스 객체를 생성(range
X)
a = [0, 10, 20] print(a*3) # [0, 10, 20, 0, 10, 20, 0, 10, 20] # id값도 다름
-
# 시퀀스 객체의 요소 개수 구하기: len()
list
와tuple
의 요소 개수를 구해줌range
의 숫자 생성 개수를 구해줌str
의 길이를 구해줌
a = [0, 10, 20, 30, 40, 50, 60]
b = list(range(1,51, 3))
c = 'Hello world!'
print(len(a)) # 7
print(len(b)) # 17
print(len(c)) # 12
-
UTF-8
문자열의 바이트 수 구하기- 한글, 한자, 일본어 등은
UTF-8
인코딩으로 저장하는데, 문자열이 차지하는 실제 바이트 수를 구하는 방법은 다음과 같다.
- 한글, 한자, 일본어 등은
hello = '안녕하세요'
print(len(hello.encode('UTF-8')))
-
인코딩 vs 디코딩
-
인코딩
- 문자열을 바이트코드로 변환
- 유니코드를
UTF-8
,EUC-KR
형식의byte
코드로 변환하는 것을 의미 str(문자열).encode('UTF-8')
▶ 해당 문자열을UTF-8
형식의byte
코드로 변환
-
디코딩
- 바이트코드를 문자열로 변환
- 인코딩(부호화)된 정보를 부호화하기 전으로 되돌리는 것을 의미
byte코드.encode('UTF-8')
▶UTF-8
byte
코드를 유니코드(문자열)로 변환
-
# 시퀀스 객체의 요소 접근하기: 인덱스
-
인덱싱(
list
,range
,str
모두 접근 가능) -
음수 인덱싱("-1"부터 시작)
a = [0, 10, 20, 30, 40, 50, 60]
b = list(range(1,51, 3))
c = 'Hello world!'
print(a[1]) # 10
print(b[1]) # 4
print(c[-1]) # !
- __ getitem __(인덱스): 시퀀스 객체의 요소에 접근
a = [0, 10, 20, 30, 40, 50, 60]
print(a.__getitem__(2))
-
IndexError
- 범위를 벗어난 인덱스에 접근할 때 발생하는 error
-
마지막 요소에 접근하기
- 시퀀스 객체[len(시퀀스 객체)-1]
a = [0, 10, 20, 30, 40, 50, 60]
target = a[len(a)-1]
print(target)
- 요소에 값 할당하기(
list
O,tuple
X,range
X,str
X) *이유:str
,tuple
,range
는immutable
객체
a = [0, 10, 20, 30, 40, 50, 60]
a[2] = 5
- 요소 삭제(
list
O,tuple
X,range
X,str
X)
a = [0, 10, 20, 30, 40, 50, 60]
del a[2]
# 시퀀스 객체의 요소 접근하기: 슬라이스
-
시퀀스 객체의 일부를 잘라서 새로운 시퀀스 객체를 만듦
-
*주의: 슬라이스의 끝 인덱스 요소는 가져오는 값에 포함X
a = [0, 10, 20, 30, 40, 50, 60]
print(a[1:3]) # [10, 20]
print(a[0:-2]) # [0, 10, 20, 30, 40]
- 증가폭 사용하기
a = [0, 10, 20, 30, 40, 50, 60]
print(a[0:-2:2]) # [0, 20, 40]
- 음수 증가폭 사용
a = [0, 10, 20, 30, 40, 50, 60]
print(a[::-1]) # [80, 70, 60, 50, 40, 30, 20, 10, 0]
- 인덱스 생략하기
a = [0, 10, 20, 30, 40, 50, 60, 70, 80]
print(a[::2]) # [0, 20, 40, 60, 80]
print(a[2:8:3]) # [20, 50,]
len()
응용
a = [0, 10, 20, 30, 40, 50, 60, 70, 80]
print(a[:len(a)]) # 리스트 전체를 가져옴
-
슬라이스에 요소 할당하기(
list
O,tuple
X,range
X,str
X)-
할당 요소가 많아지면 list 전체 요소 개수도 증가
-
할당 요소가 적어지면 list 전체 요소 개수도 감소
-
*주의: 증가폭을 설정했을 경우, 슬라이스된 요소의 개수와 할당 요소의 개수가 일치해야 함
-
a = [0, 10, 20, 30, 40, 50, 60, 70, 80]
a[2:5] = [2, 'apple', True, False] # [0, 10, 2, 'apple', True, False, 50, 60, 70, 80]
a[2:7:2] = ['1', True, ] # error
# 딕셔너리
-
딕셔너리 만들기
-
key : value
형태 -
key-value-pair:
key
와value
는 1:1 대응key
가 중복되는 경우- 가장 뒤에 있는
value
만 사용
- 가장 뒤에 있는
-
-
딕셔너리 키의 자료형
-
str
,int
,float
,bool
,tuple
등list
와dict
를 제외한 자료형만 가능 -
value
에는 모든 자료형 가능
-
a = {(2,3):5} # 정상 처리
a = {[2,3]:5} # TypeError
- 빈 딕셔너리 만들기
x = {}
y = dict()
-
dict()
로 딕셔너리 만들기'dict()
는 다음과 같이 키와 값을 연결하거나, 리스트, 튜플, 딕셔너리로 딕셔너리를 만들 때 사용- zip([key값],[value값]): key와 value를 지닌 zip 객체를 return
딕셔너리 = dict(키1=값1, 키2=값2) # key가 str type인 경우 따옴표 제거하고 입력
딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
딕셔너리 = dict([(키1, 값1), (키2, 값2)])
딕셔너리 = dict({키1: 값1, 키2: 값2})
lux1 = dict(health=490, mana=334, melee=550)
lux2 = dict(zip(['health', 'mana', 'melee'], [490, 334, 550]))
lux3 = dict([('health', 490), ('mana', 334), ('melle', 550)])
lux4 = dict({'health': 490, 'mana':334, 'melle':550})
-
딕셔너리 키에 값 할당하기
- 기본 형태
딕셔너리[key] = 지정할 값(value)
- 딕셔너리에 존재하지 않는 key에 value를 할당하면, 해당 key와 value가 추가된다
- 기본 형태
lux1 = dict(health=490, mana=334, melee=550)
lux1['strength'] = 210 # {'health': 490, 'mana': 334, 'melee': 550, 'strength': 210}
- 딕셔너리에 키가 있는지 확인하기
- 기본 형태
key in 딕셔너리
- 기본 형태
lux1 = dict(health=490, mana=334, melee=550)
lux1['strength'] = 210
print('mana' in lux1) # True
- 해시
딕셔너리는
해시(Hash)
기법을 이용해서 데이터를 저장.해시(Hash)
는 (key,value)로 데이터를 저장하는 자료구조를 뜻하며, 해시 맵, 해시테이블 등으로 부르기도 한다. 빠르게 데이터를 검색할 수 있는 것이 장점이다. - 딕셔너리 키 개수 구하기
딕셔너리의 길이: 딕셔너리의 key 개수
lux1 = dict(health=490, mana=334, melee=550)
lux1['strength'] = 210
print(len(lux1)) # 4
Author And Source
이 문제에 관하여(TIL - Python - 논리 연산자&문자열 사용&리스트와 튜플&시퀀스 자료형&딕셔너리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fcfargo/TIL-Python-논리-연산자문자열-사용리스트와-튜플시퀀스-자료형딕셔너리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)