# print('hello)
"""
print("hello)
print("안녕")
"""
a = 100
키워드는 변수로 사용 불가
의미없는 이름의 변수는 사용을 지양(변수 이름을 의미있게 설정 해야함)
변수는 숫자로 시작하면 안됨 (무조건 문자로 시작 => 특수문자 시작(X))
한글이름의 변수는 사용 가능? => 사용할 수 있지만 세상 누구도 사용 안함
당연히 영문자(대문자, 소문자)는 다른문자로 구별된다.
변수가 두 개 이상의 단어로 구성 된 경우 '_' 기호를 이용해 두가지 이상의 변수 이름을 이어 붙인다.(필수는 아니지만 관용적 표현에 따름
a = 200 (O)
#a = 300 (Error)
1. Numeric
2. Sequence
3. Text Sequence
4. Maping
5. Set
6. Bool
a = 100
b = 3.14
c = 3.14E-10
d = 0o7
e = 0xAB
# 각각 여러가지 형태의 [정수형, 실수형, 실수형, 8진수, 16진수]로 표현
print(a) #100
print(b) # 3.14
print(type(a))
print(type(b))
print(type(c))
print(type(d))
결과 값
100
3.14
<class 'int'>
<class 'float'>
<class 'float'>
<class 'int'>
a = 3 /4 print(a) # 규칙에 따르면 0이 출력되는게 맞음(Java나 C같은 언어) # Python은 0.75로 출력 # 그 이유는 모든 숫자 연산은 내부적으로 "실수"처리 a = 3.0/ 4.0 으로 계산 되는 것임 a = 10 % 3 %연산자 (나머지 구하는 연산자) print(a) # 1 a = 10 // 3 //연산자 (몫을 구하는 연산자) print(a) #3출력
1. Numeric
2. Sequence
a = [] list (empty list => 가지고 있는 데이터가 없음!) a = [1, 2, 3, 4] list안에는 같은 데이터 타입만 들어오지 않음! a = [1, 2, 3.14] list안에는 다른 list가 들어올 수 있음 (중첩 리스트) a = [1, 2, [3, 4], 5] a= list() <class list> empty list 생성할 때 사용 => a = []
a = [1, 2, 3, [4, 5], 6] print(a[0]) # 1 a[0] = 100 print(a) # [100, 2, 3, [4, 5], 6] print(a[3][0]) # 3번째 인덱스 자리인 [4, 5]가 선택이 되고 그 안에서 0번째 인덱스인 "4"가 출력된다. print(a[5]) # Error 발생 print(a[-1]) # 다른 프로그래밍 언어에서는 마이너스 인덱스를 사용할 수 없음! # 하지만 Python은 사용 가능a = [1, 2, 3, [4, 5], 6]
-5 -4 -3 -2 -1 이 순서로 배치 됨
a = [1, 2, 3, [4, 5], 6] a[start index : end index] print(a[1:3]) # slicing 시작 인덱스는 inclusive(포함), 끝 인덱스는 exclusive(불포함) # [2, 3]이 출력됨 # slicing은 원본의 부분집합을 구하는 것이기 때문에 # 당연히 원본과 동일한 데이터 타입이 나옴 print(a[1:2]) # 2 (X) 원본과 동일한 형태인 list 형태로 [2] 가 출력됨 print(a[1:]) # 1부터 끝까지! print(a[:3]) # 처음부터 index 2까지 [1, 2, 3] 출력됨 print(a[:]) # 처음부터 끝까지 [1, 2, 3, [4, 5], 6] 출력됨
a = [1, 2, 3] b = [4, 5, 6] print(a + b) a = [1, 2, 3] result = a * 3 # 곱하기의 경우 a + a + a => a * 3 즉, 여러번 연결한다는 의미가 됨 print(result)결과 값
[1, 2, 3, 4, 5, 6][1, 2, 3, 1, 2, 3, 1, 2, 3]
a = list() a[0] = 100 # Error 방 자체가 없어서 에러가 발생함 a.append(10) # append()는 리스트의 맨 마지막 방을 추가하고 원소를 저장하는 기능 print(a) # [10] a.append(20) print(a) # [10, 20]
a = [4, 7, 10, 2, 8, 1, 9]
- 리스트 안에 요소(원소)를 정렬하려면 어떻게 해야하나?
- 정렬의 기본은 오름차순 정렬(작은 값이 맨 위 혹은 맨 앞에 위치)
result = a.sort() print(result) # None (값이 없음!) # list의 sort()기능은 원본을 정렬하고 정렬된 "결과를 리턴하지 않음" # = 결과를 새롭게 복사본으로 만들지 않음a.sort() print(a) # [1, 2, 4, 7, 8, 9, 10]result = sorted(a) # sorted()는 원본은 그냥두고 정렬된 복사본을 만드는 것! print(a) # [4, 7, 10, 2, 8, 1, 9] print(result) # [1, 2, 4, 7, 8, 9, 10]
a = 100 print(id(a)) # 140724502670176
a = 1000 b = 1000 print(id(a)) # 1522334941264 print(id(b)) # 1522334942000
a = 100 b = 100 print(a==b)
print(a is b)
a = [1, 2, 3] b = [1, 2, 3] print(a==b) # True print(a is b) # False
- 튜플은 다음과 같이 표현될 수 있다.
a = (1, 2, 3) # (1, 2, 3) a = () # empty tuple cf) [] # list와 같이 튜플이 비어있으면 empty로 표시 a = tuple() # empty tuple cf) list()
print(type(a)) # <class 'tuple'>
a = (1, 2, 3, (4, 5), 6) # 중첩 tuple a = [1, 2, (3, 4), 5] # 가능 a = (1, 2, 3, [4, 5], 6) # 가능
a = (1, 2, 3) print(a[1]) # 2 a[0] = 100 # 결과 Error tuple()은 read only이기 때문에 값을 변경할 수 없다!
✔ Tuple의 표현
a = (1, 2, 3)의 경우 누가봐도 tuple이다
우리는 그럼 언제 tuple의 ()를 사용하는가
a = (1) 이 경우 ( )의 의미가 혼동됨
연산자 우선순위 ( )인지 아니면 tuple( )인지
그렇기 때문에 안에 있는 요소(원소)가 1개인 경우
a = (1, 2, 3) == a = 1, 2, 3
a = (1, 2, [3, 4], 5) a[2][0] = 100 # 가능 ? 불가능? print(a)결과
(1, 2, [100, 4], 5) 출력 # tuple의 값은 변경이 불가능 하지만 리스트의 값은 변경이 가능하다!
a = (1, 2, 3) b = (4, 5, 6) result = a + b print(result)결과 (1, 2, 3, 4, 5, 6)
a = (1, 2, 3) b = list(a) print(b)결과 [1, 2, 3] 출력
a = range(초기값, 마지막값, 증가값) a = range(0, 10, 1) # 0은 포함하고 10은 포함안함 즉 0부터 10까지 0~9 // 1,2,3,4...9 print(a) # 결과 range(0, 10)
- list, tuple같은 경우 1000000개의 데이터를 가지고 있으면 실제 메모리양도 데이터 개수만큼 많이 필요
- 하지만 range는 실제 데이터가 아닌 데이터 영역(range)에 대한 의미만 저장하기 때문에 작은 메모리 공간으로 많은 데이터 표현 가능
a = range(10) # range(0, 10, 1)과 같은 의미 print(a) # 결과 range(0, 10)a = range(4, 100, 2) print(a) # 결과 range(4, 100, 2)
print(6 in range(10)) #True
a = range(10, 50, 1) print(a[1]) # 11 즉, indexing 가능 print(a[5:10]) # range(15,20) slicing은 원본의 type을 유지