리터럴 : 데이터 값 그 자체
상수 : 변하지 않는 값 (파이썬은 상수를 지원하지 않음)
변수 : 언제나 바뀔 수 있는 수 (변할 수 있는 값을 담는 공간)
변수 선언하는 방법
변수명 = 값
대입연산자(=)
변수
숫자로 시작하면 안됨
빈칸, 특수 기호 사용 불가
파이썬은 네이밍 컨벤션 강제성 없음
변수값에 의해 type 이 결정됨
type(자료형)
다른 프로그래밍 언어는 변수 선언할 때 타입도 같이 지정해줘야함
False == 0
True == 1
리스트, 튜플, 딕셔너리, 세트, 스트링
Class Type으로 돼있음
print 함수 == 내장 함수(미리 제공하는 거)
순서가 있는 집합
리스트(list)는 여러 개의 구성요소를 가지는 목록이다.
변수에는 값을 하나만 넣을 수 있는데, 두 개 이상의 여러 개의 값을 나타내고 싶을 때는 리스트를 사용한다.
이런 형태를 배열이라고 부르기도 한다.
리스트가 가지는 값들을 요소(element), 성분, 아이템이라고 부른다.
리스트는 대괄호[] 안에 요소들을 콤마로 나열하거나 list() 함수로 생성한다.
리스트는 여러 종류의 자료형을 가진다.
리스트는 요소의 순서가 있고, 요소의 중복이 가능하며, 요소의 변경, 추가, 삭제 등이 가능하다.
nums = [1, 2, 3, 4, 5]
왼쪽에서 오른쪽으로 index 번호 넣을 때는 0부터 시작해서 4로 끝남
오른쪽 끝에서 왼쪽으로 index 번호 매길 때는 -1부터 시작해서 왼쪽으로 가면서 -1씩 감소함
1의 index -5
len()이라는 함수의 이름은 length(길이)의 줄임말로, 괄호 안에 주어진 객체의 요소 개수를 파악하는 함수이다.
len(fruits) // 5
del은 요소를 삭제(delete)하는 예약어
del fruits[-1]은 fruits 리스트에 있는 -1번째 요소인 마지막 값을 삭제한다.
del fruits[-1] // ['apple', 'orange', 'banana', 'cherry']
fruits[0] = 'pear' // ['pear', 'orange', 'banana', 'cherry', 'grape']
리스트 객체의 함수를 호출할 때는 다음과 같이 객체명 다음에 점(.)을 입력해서 객체가 가진 변수를 참조하거나 함수를 호출해 사용할 수 있다.
리스트객체명.함수()
fruits는 리스트 객체를 참조하는 객체 변수 즉, 리스트 객체명이다. 따라서 fruits, 다음에 함수를 입력하여 리스트에서 사용할 수 있는 다양한 함수를 호출할 수 있다.
fruits.append('apple') // ['pear', 'orange', 'banana', 'cherry', 'grape', 'apple']
fruits.insert(1, 'pineapple') // ['pear', 'pineapple', 'orange', 'banana', 'cherry', 'grape', 'apple']
fruits.sort() //
['apple', 'banana', 'cherry', 'grape', 'orange', 'pear', 'pineapple']
fruits.sort(reverse=True) // ['pineapple', 'pear', 'orange', 'grape', 'cherry', 'banana', 'apple']
튜플(tuple)은 리스트와 비슷하게 여러 개의 데이터로 구성된 자료형이다.
리스트와의 차이점은 추가나 삭제 등 요소의 변경이 불가능한 읽기 전용이라는 점이다.
튜플은 요소의 순서가 있고, 요소의 중복이 가능하며, 요소의 변경, 추가, 삭제 등은 불가능하다.
튜플은 괄호() 안에 요소들을 콤마로 나열하거나 tuple() 함수로 생성한다.
한번 생성한 요소는 변경 할 수 없으므로 리스트에서 사용하는 append()나 insert() 같은 함수는 사용할 수 없고, count(), index() 함수만을 가진다.
요소들의 순서가 있고, 요소들의 중복을 허용, 요소들의 추가, 변경, 삭제 등 불가능
생성 방법 : (요소, 요소, ...) 혹은 tuple() 사용하여 생성
t = (1,2,3,1,2,3)
t.count(1) // 2
튜플은 변경하려고 하면 에러남
문자열(str)은 문자들의 집합을 말한다. 문자열은 요소의 순서가 있고, 요소의 중복을 허용하며, 요소의 변경, 추가, 삭제 등은 불가능하다.(immutable 불변성) 파이썬의 문자열 리터럴은 작은따옴표(') 또는 큰따옴표(")로 묶어서 표현한다.
여러 줄의 문자열을 표현할 때는 작은따옴표 또는 큰따옴표 세 개로 묶어서 입력하면 된다. 만약 따옴표 안에 숫자가 있다면 숫자도 문자열로 간주한다.
파이썬 셀에서는 한 줄로 명령이 끝나지 않은 상태에서 엔터 키를 누르면 다음 줄의 맨 앞에 ...이 표시된다. 여기에 코드를 이어서 입력하면 되고, 명령이 끝날 때까지는 엔터 키를 누를 때마다 ...이 계속해서 나온다.
요소들의 순서가 있고, 요소들의 중복을 허용, 요소들의 추가, 변경, 삭제 등 불가능
생성 방법 : "" 또는 '' 또는 """~""" 또는 '''~''' 혹은 str() 사용하여 생성
따옴표 3개는 여러 줄에 걸쳐서 쓸 때
문자열에 특수한 값들, 예를 들어 줄 바꿈(개행), 탭, 따옴표 등을 표현하고 싶을 때, 이스케이프(escape) 문자를 사용한다. 이스케이프 문자는 역슬래시()와 함께 사용한다.
\n : 줄바꿈
\t : 탭
\r : 캐리지 리턴(carriage return) 줄 바꾸고 커서를 맨 앞으로 이동
\\ : 역슬래시
\' : 작은따옴표
\" : 큰따옴표
문자열은 더하기(+) 연산자를 이용하여 연결할 수 있다. 더하기 연산자는 수학에서처럼 더하기를 수행하는 것이 아니라 문자열을 연결하는 역할을 한다.
더하기 연산자를 생략해도 결과는 같다.
'문자열' + '더하기' // '문자열더하기'
'문자열' '더하기' // '문자열더하기'
문자열 곱하기
'안녕' * 3 // '안녕안녕안녕'
문자열이랑 숫자 더하면 에러남
'안녕' + 3
문자열과 숫자 더해주는 방법 str() 사용
str() : 숫자를 문자열로 변환해주는 내장 함수
'문자열' + str(3) // '문자열3'
'문자열' '3' // '문자열3'
문자열 인덱싱은 딘덱스 번호를 이용해 각 문자에 접근하는 것을 의미한다. 인덱스는 리스트의 인덱스와 동일하게 0부터 시작하며, 왼쪽에서 오른쪽으로 1씩 증가한다. 뒤에서부터 번호를 매길 때는 -1에서 시작하여 오른쪽에서 왼쪽으로 -1씩 감소한다.
문자열객체[인덱스 번호]
문자열 인덱싱이 리스트 인덱싱과 다른 점은 인덱싱으로 문자열에 새로운 값을 할당할 수는 없고 오직 조회만 가능하다는 점이다. 이는 문자열이 변경 불가능한 자료형이기 때문에 가지는 특징이다.
문자열의 특정 인덱스를 가져와서 그 값을 바꾸려고 하면 에러가 발생함
문자열 슬라이싱은 리스트 슬라이싱과 동일하게 문자열의 일부를 잘라서 조회하는 기능이다.
문자열객체명[시작값:종료값:증감값]
시작값을 생략하면 기본으로 0부터 시작하고 종료값은 제외, 즉 종료값 -1까지 가져온다. 증감값을 생략하면 기본으로 1씩 증가하는 것으로 지정되고, 종료값을 생략하면 종료값을 포함하여 가져온다.
문자열 객체도 점을 이용해 문자열 객체의 함수를 호출할 수 있다.
자바에서 .trim()
s = ' 양쪽 공백 문자열 '
s.strip() // '양쪽 공백 문자열'
s.rstrip() // ' 양쪽 공백 문자열'
s.lstrip() // '양쪽 공백 문자열 '
s.split() // ['양쪽', '공백', '문자열']
s2 = '010-111-2222'
s2.split('-') // ['010', '111', '2222']
문자열 포매팅(string formatting)이란 외부에서 문자열에 값을 삽입하는 방법을 말한다. 주로 주어진 문자열을 일부만 바꿀 때 유용하다. 문자열 포매팅은 세 가지 방법이 있다.
%d : 정수(d : decimal, 십진수를 의미)
%f : 부동소수(floating-point)
%s : 문자열(string)
%% : 리터럴(문자 그 자체)
여기서 %s 포매팅은 어떤 형태의 값이든 변환해서 문자열에 넣을 수 있다. 따라서 %s만 알고 있으면 입력값이 어떤 자료형인지 모르거나 자료형이 변경될 때도 모두 적용할 수 있어 기억해두면 좋다.
문자열이 길거나 입력값이 많을 때, 입력값의 자릿수와 입력 위치를 지정할 때, 빈자리를 특정 값으로 채우면서 문자열을 만들 때 문자열 포매팅을 사용하면 매우 편리하다.
# 포매팅 사용 X
name = '신사임당'
age = 50
'이름은 ' + name + '이고, 나이는 ' + str(age) + '이다.'
// '이름은 신사임당이고, 나이는 50이다.'
# 포매팅 사용 O 두 개 이상 튜플 형식으로 전달
'이름은 %s이고, 나이는 %d이다.' % (name, age)
// '이름은 신사임당이고, 나이는 50이다.'
# 자리 수 지정 (빈 자리수 공백)
'오늘은 %2d월 %2d일입니다.' % (1, 1)
// '오늘은 1월 1일입니다.'
# 자리 수 지정 (빈 자리 값 지정)
'오늘은 %02d월 %02d일입니다.' % (1, 1)
// '오늘은 01월 01일입니다.'
문자열 포매팅을 하는 함수는 format() 함수로, 다음과 같이 호출한다. 중괄호에 문자열을 삽입할 인덱스 번호를 지정하고, 해당 위치에 format()에 입력한 값을 넣는다. 인덱스 번호는 format()에 입력한 값을 순서대로 첫 번째는 0, 두 번째는 1, 이런 식으로 0부터 하나씩 증가시켜 인식한다.
값이 하나만 있을 때는 인덱스 번호를 생략해도 된다. {} 사이에 공백 넣으면 안됨
'이름은 {0}입니다.'.format('이순신')
// '이름은 이순신입니다.'
'이름은 {}입니다.'.format('이순신')
// '이름은 이순신입니다.'
name = '이순신'
salary = 1000
'이름은 {0}이고, 월급은{1}원입니다.'.format(name, salary)
// '이름은 이순신이고, 월급은1000원입니다.'
빈자리가 있을 때 문자열의 위치를 정렬하려면 콜론과 함께 >, <, ^를 사용한다. >는 오른쪽 정렬, <는 왼쪽 정렬, ^는 가운데 정렬이다.
'오늘은 {0:>2}월 {1:>2}일입니다.'.format(1,1)
// '오늘은 1월 1일입니다.'
'오늘은 {0:<2}월 {1:<2}일입니다.'.format(1,1)
// '오늘은 1 월 1 일입니다.'
문자열의 빈자리를 채울 때는 콜론과 >, <, ^ 사이에 빈자리를 채울 값을 넣으면 된다.
'오늘은 {0:0>2}월 {1:0>2}일입니다.'.format(1,1)
// '오늘은 01월 01일입니다.'
f 문자열 포매팅은 파이썬 3.6 버전부터 지원되는 기능이다. f 문자열 포매팅은 다음과 같이 문자열 앞에 f 접두사를 붙여서 만들며, 값은 변수로 삽입한다.
name = '이순신'
salary = 1000
f'이름은 {name}이고, 월급은 {salary}원입니다.'
// '이름은 이순신이고, 월급은 1000원입니다.'
순서가 없는 집합들
딕셔너리(dict)는 말 그대로 사전에서 단어와 의미가 짝지어져 있는 것처럼 키와 값의 쌍으로 구성된 자료형이다. 딕셔너리는 중괄호 {} 안에 키(key):값(value)의 쌍을 콤마로 나열하거나 dict() 함수로 생성한다.
딕셔너리는 요소의 순서가 없다. 키는 중복이 불가하고, 값은 중복이 가능하다.
키는 변경이 불가하고, 값은 변경이 가능하다. 추가 시 키와 값이 함께 추가되고, 삭제 시 키와 값이 함께 삭제 된다.
키는 변경이 불가하므로 문자열이나 튜플로만 만들 수 있다. 값은 모든 타입으로 만들 수 있다. 즉, 값으로 또 다른 딕셔너리나 리스트 등을 넣을 수 있다. 딕셔너리의 특징은 요소의 순서가 없고 다양한 자료형을 섞어서 만들 수 있으며 중첩도 가능하다.
딕셔너리 인덱싱과 슬라이싱 불가능(순서가 없으니까)
key-value 쌍으로 구성, 요소들의 순서 없음, 요소들 추가와 삭제는 key-value 쌍으로 이루어짐
key : 중복 불가, 변경 불가 / type - str, tuple로만 생성
value : 중복 가능, 변경 가능 / 모든 type으로 생성 가능
생성 방법 : {key:value, ...} 또는 dict()
people = {'name' : '홍길동', 'age' : 20}
people // {'name': '홍길동', 'age': 20}
people['age'] // 20
people[0] 이렇게 출력하려고 하면 에러남
딕셔너리 추가
people['height'] = 170 //
{'name': '홍길동', 'age': 20, 'height': 170}
딕셔너리 수정
people['age'] = 30 //
{'name': '홍길동', 'age': 30, 'height': 170}
people.items() // dict_items([('name', '홍길동'), ('age', 30), ('height', 170)])
people.keys() //
dict_keys(['name', 'age', 'height'])
people.values() //
dict_values(['홍길동', 30, 170])
세트(set)는 여러 요소의 집합을 의미한다. 요소끼리는 순서가 없으며, 요소들의 중복을 허용하지 않는다. 요소의 순서가 없으므로 요소 하나씩은 변경할 수 없고, 통째로 다른 세트로 변경해야 한다. 요소의 추가 및 삭제는 가능하다. 세트는 중괄호{} 안에 콤마로 요소들을 나열하거나 set() 함수로 생성한다.
요소들의 순서가 없고, 중복 불가능, 요소들의 변경은 불가능, 추가와 삭제 가능
생성 방법 : {요소, 요소, ...} 또는 set() 사용하여 생성
s = {1,2,3,1,2,3} // {1, 2, 3} 중복 안됨
s1 = {3,4,1,2,3,4,5,6} // {1, 2, 3, 4, 5, 6}
# 교집합
s.intersection(s1) // {1, 2, 3}
# 합집합
s.union(s1) // {1, 2, 3, 4, 5, 6}
예약어는 키워드라고도 하며 프로그램에 미리 등록돼서 특정 기능을 하는 단어를 의미한다. 예약어는 대소문자를 구분한다.
변수나 함수, 클래스 등의 이름을 지을 때 예약어는 사용할 수 없다.
다만 예약어를 포함한 단어는 사용해도 괜찮다.
예를 들어 class는 클래스를 의미하는 예약어라서 변수명으로 사용할 수 없지만, class_var처럼 class를 포함한 단어는 이름으로 사용할 수 있다.
예약어 종류
False, True, None, await, async, for, while, break, continue, class, else, elif, if, except, try, finally, import, in, is, pass, raise, return, and, or, lambda, as, def, from, nonlocal, assert, del, global, not, with, yield
Null 대신 None
() [] { : } {} : 괄호, 리스트, 딕셔너리, 세트
** : 지수
+x, -x, ~x : 양수, 음수, 비트 전환
*, /, //, % : 곱셈, 나눗셈, 나눗셈 몫, 나눗셈 나머지
+, - : 덧셈, 뺄셈
<<, >> : 비트 이동
& : 비트 AND 연산 모두 참일 때 True 나머지 False 반환
^ : 비트 XOR 연산
| : 비트 OR 연산 모두 False일 때 False 반환 나머지 True 반환
< <= > >= != == : 비교
not : 불 전환 이진수 반전 0 을 -1로 결과 반전
and : 불 AND 연산
or : 불 OR 연산
= : 할당(대입)
인덱싱, 슬라이싱 - 순서가 있는 배열 형식에서 사용 가능
특정 위치 값을 가져오기 위해 사용함.
list, tuple, str
리스트 인덱싱이란 리스트의 인덱스 번호를 사용하여 해당 위치에 있는 값을 가져오는 것을 말한다.
인덱싱하는 방법은 다음과 같으며, 인덱스 번호 값은 정수만 사용할 수 있다. 다음 구문의 리스트 객체명이란, 리스트 객체를 참조하는 변수명을 의미한다. 이후에 나오는 객체명은 모두 객체를 참조하는 객체 참조 변수명을 의미한다.
fruits = ['apple', 'orange', 'banana', 'cherry', 'grape']
fruits[0] // ['apple']
fruits[-1] // ['grape']
리스트 슬라이싱이란 특정 범위를 지정하여 리스트에서 해당 범위에 있는 값들을 가져오는 것을 말한다.
리스트객체명[초깃값:종료값:증감값]
초깃값을 생략하면 기본값으로 0이 설정된다. 종료값을 생략하면 마지막 값을 포함한다는 뜻이며, 증감값(증가 혹은 감소 값)을 생략하면 기본값은 1씩 증가하라는 의미이다. 증감값을 생략할 때는 바로 앞의 콜론(:)도 함께 생략한다.
종료값을 지정하면 종료값은 포함되지 않는다. 즉, 종료값 바로 이전의 값까지 가져온다. 이는 인덱스가 0부터 시작해서 그렇다고 보면 된다. 이처럼 슬라이싱에서 콜론을 사용하여 범위를 지정하는 방식을 범위 인덱스라고도 부른다.
fruits[0:3] // ['apple', 'orange', 'banana']
fruits[1:2] // ['orange']
fruits[0:-1] // ['apple', 'orange', 'banana', 'cherry'] 마지막 인덱스 이전까지 출력됨
fruits[0: ] // ['apple', 'orange', 'banana', 'cherry', 'grape'] 종료 인덱스 생략하면 끝까지 출력됨
fruits[ : ] // ['apple', 'orange', 'banana', 'cherry', 'grape'] 시작,종료 인덱스 생략하면 모든 요소 출력됨 fruits[0: :1]과 같음
fruits[0::2] // ['apple', 'banana', 'grape'] 0부터 마지막 인덱스까지 2씩 증가
fruits[0:3:1] == fruits[:3]
같은 표현