# 리스트의 원소들이 순서대로 변수에 대입
for 변수 in 리스트(or 튜플, 문자열):
수행할 문장
# range 범위는 시작숫자 이상 , 끝 숫자 미만! 이다. 끝숫자 포함 x
for 변수 in range(시작숫자,끝숫자):
수행할 문장
# range 범위는 0부터 숫자 미만까지이다.
for 변수 in range(숫자):
수행할 문장
문자열이나 리스트의 객체마다 번호를 매겨 그 번호에 해당하는 값을 가리킬 때 인덱싱을 사용한다.
인덱스는 0부터 시작!
맨마지막 인덱스는 -1로 표현 가능.
>>> a = "life"
>>> a[0]
'l'
# 문자열의 요소값은 바꿀수 없는 값이 아니기 때문에 오류발생!
>>> a[0] = "L"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> a = ['a','b','c']
>>> a[0]
'a'
>>> a[0] = "z"
>>> a
['z', 'b', 'c']
한 문자, 한 요소만 뽑아내는 것이 아니라 일부를 잘라내 추출하는 방식을 슬라이싱 이라 한다.
# start 이상 end 미만까지의 값을 가져온다.
# step은 생략할 경우 1이 된다.(생략가능)
객체 = [start:end:step]
>>> ex = "example"
>>> ex[0:3]
'exa'
>>> ex[1:3]
'xa'
>>> ex[3:]
'mple'
>>> ex[:3]
'exa'
>>> ex[:3:2]
'ea'
💡 인덱싱과 슬라이싱은 리스트나 튜플에서도 사용할 수 있다!
startswith()
는 어떤 문자열이 특정문자
로 시작하는지 확인하여 true
or false
로 반환하는 함수입니다.
# 시작문자 생략 가능, 기본값 0
str.startswith(특정문자,시작위치)
>>> a = "hello world"
>>> a.startswith("a")
False
>>> a.startswith("h")
True
>>> a.startswith("h",1)
False
>>> a.startswith("e",1)
True
문자열을 나눌 때 쓰는 함수이다.
# split()은 공백을 기준으로 문자열을 나눈다.
>>> intro = "my name is jenny"
>>> intro.split()
['my', 'name', 'is', 'jenny']
# split(구분자)를 기준으로 문자열을 나눈다.
>>> animal = "dog,bear,cat"
>>> animal.split(',')
['dog', 'bear', 'cat']
# split()은 공백이 n개라도 1개로 처리 split(" ")은 공백 1개를 따로따로 처리
>>> a = "a b c d"
>>> a.split()
['a', 'b', 'c', 'd']
>>> a.split(" ")
['a', '', '', '', '', '', '', '', '', 'b', 'c', 'd']
# split(구분자,분할횟수)
>>> a = "a,b,c,d,e,f,g,h"
>>> a.split(",",3)
['a', 'b', 'c', 'd,e,f,g,h']
.append()
는 괄호 안의 값을 array 맨 뒤에 추가하는 함수이다.
>>> number = [1,2,3]
>>> number.append(4)
>>> number
[1, 2, 3, 4]
>>> number.append([4,5])
>>> number
[1, 2, 3, 4, [4, 5]]
.upper()
는 문자열의 모든 소문자를 대분자로 변환하고 반환한다.
.lower()
는 문자열의 모든 대문자를 소문자로 변환하고 반환한다.
위 두 함수 모두 변환된 문자열을 반환할 뿐 문자열 자체는 바뀌지 않는다.
>>> a = "HELLO world"
>>> a.upper()
'HELLO WORLD'
>>> a
'HELLO world'
>>> a.lower()
'hello world'
.replace()
는 문자열을 변경하는 함수로 특정문자를 새로운 문자로 변경하는 기능을 가지고 있다.
변환된 문자열을 반환할 뿐 문자열 자체는 바뀌지 않는다
>>> a = "hello world!"
>>> a.replace("world","everyone")
'hello everyone!'
>>> a
'hello world!'
>>> a = "????!!!!"
>>> a.replace("?","#")
'####!!!!'
# 문자열을 변경하는 횟수를 지정할 수 있다.
>>> a.replace("?","#",1)
'#???!!!!'
>>> a
'????!!!!'
파이썬에서는 파일을 사용한 후 close()를 사용하여 파일을 닫아줘야한다. 그렇지 않으면 문제 발생할 수도 있어요!
.read()
: 파일 전체를 문자열로 돌려줌# r : 읽기모드. w: 쓰기모드 a: 추가모드
f = open(파일이름, 모드)
data = f.read() # f.read()는 파일 전체를 문자열로 돌려준다.
f.close()
with open(파일이름, 모드) as f:
data = f.read()
data = []
with open(파일명) as f:
for line in f:
data.append(line)
데이터를 효율적으로 나타내기 위한 특정 데이터 타입을 말함.
list()
, tuple()
, dict()
,set()
등등
list.append(value)
: list 맨 뒤에 value 값 추가list.insert(index,value)
: list[index]위치 value값을 넣는다. 원래 원소들은 뒤로 밀림.list.pop(x)
: list의 x번째 값을 삭제하고 리턴, 기본값 마지막 값list.reverse()
: list를 역순으로 변경>>> list = [1,3,4,6,7,2]
>>> list.append(100) # 맨뒤에 추가
>>> list
[1, 3, 4, 6, 7, 2, 100]
>>> list.insert(2,5) # 지정된 위치에 추가
>>> list
[1, 3, 5, 4, 6, 7, 2, 100]
>>> list.pop() # 맨뒤 삭제
100
>>> list
[1, 3, 5, 4, 6, 7, 2]
>>> list.pop(1) # 지정된 위치값 삭제
3
>>> list
[1, 5, 4, 6, 7, 2]
>>> list.reverse() # 역순
>>> list
[2, 7, 6, 4, 5, 1]
tuple.count(value)
: tuple 안에서 value의 개수를 구함tuple.index(i)
: tuple의 i의 위치를 반환+
: 서로 다른 튜플을 합칠 수 있다.*
: 튜플을 반복할 수 있다.append()
, del
,sort
불가능>>> tuple = (1,) # 1개의 데이터만 가지는 튜플
>>> type(tuple)
<class 'tuple'>
>>> tuple = (1)
>>> type(tuple)
<class 'int'>
>>> tuple = (1,2,3,5,1,1)
>>> tuple.count(1) # value 개수 구하기
3
>>> tuple.count(2)
1
>>> tuple.count(4)
0
>>> tuple = ("a","c","b")
>>> tuple.index("b") # value 위치 찾기
2
>>> tuple = (1,2,3)
>>> tuple = tuple + (1,2) # 튜플 더하기
>>> tuple
(1, 2, 3, 1, 2)
>>> tuple + (1,)
(1, 2, 3, 1, 2, 1)
>>> tuple * 2 # 반복
(1, 2, 3, 1, 2, 1, 2, 3, 1, 2)
# 튜플 → 리스트
>>> a = (1,2,3)
>>> list(a)
[1, 2, 3]
# 리스트 → 튜플
>>> a = [1,2,3]
>>> tuple(a)
(1, 2, 3)
key
: 중복 x
dict[키값]
: 키값을 이용하여 value 값에 접근할 수 있다. 변경도 가능
del dict[키값]
: 딕셔너리 항목 제거
키값 in dictionary
: 딕셔너리 안에 key값이 존재하는지 확인할 수 있다.
인덱싱 사용 x
dict = { key: value }
# 딕셔너리 정의
>>> dict = {
... "name" : "jenny",
... "age" : 25,
... "school" : "school"
... }
# 딕셔너리 값 접근하기
>>> dict["name"]
'jenny'
# 딕셔너리 변경
>>> dict["age"]=22
>>> dict
{'name': 'jenny', 'age': 22, 'school': 'school'}
# 딕셔너리 항목 제거
>>> del dict["school"]
>>> dict
{'name': 'jenny', 'age': 22}
# 키값 존재 유무 확인
>>> "name" in dict
True
json
loads()
: JSON 형태의 문자열을 딕셔너리로 변환.
dumps()
: 딕셔너리를 JSON 형태의 문자열로 변환합니다.
-중복 X -> 중복을 제거하기 위한 필터 역할로 종종 사용
-순서 X
-인덱싱 지원 x , 인덱싱 사용하려면 리스트나 튜플로 변환 후 사용
# 집합 자료형은 set키워드를 사용해 만들 수 있다.
# set() 괄호안에 리스트나 문자열을 입력하여 만들 수 있다.
>>> s1 = set([1,2,3,4,5])
>>> s1
{1, 2, 3, 4, 5}
>>> s2 = set("hello")
>>> s2
{'o', 'e', 'h', 'l'}
# 빈 집합 자료형
>>> s = set()
>>> s
set()
>>> s1 = set([1,2,3,4,5])
>>> s2 = set([3,4,5,6,7])
# 교집합 &, intersection
>>> s1 & s2
{3, 4, 5}
>>> s1.intersection(s2)
{3, 4, 5}
>>> s2.intersection(s1)
{3, 4, 5}
# 합집합 | , union
>>> s1|s2
{1, 2, 3, 4, 5, 6, 7}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7}
# 차집합 - , difference
>>> s1-s2
{1, 2}
>>> s2-s1
{6, 7}
>>> s1.difference(s2)
{1, 2}
>>> s2.difference(s1)
{6, 7}
add
: 값 1개 추가
update
: 값 여러개 추가
remove
: 값 제거
>>> s1 = set([1,2,3])
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}
>>> s1.update([5,6])
>>> s1
{1, 2, 3, 4, 5, 6}
>>> s1.remove(2)
>>> s1
{1, 3, 4, 5, 6}
차이점 1. sort()로 문자열 정렬 불가능
# sorted()
>>> a = "apple"
>>> a = sorted(a)
>>> a
['a', 'e', 'l', 'p', 'p']
# sort() , 오류 발생
>>> a = "apple"
>>> a.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'sort'
차이점 2. sorted()는 정렬 결과를 리턴할 뿐 그 자체는 바뀌지 않는다. 변수 필요
# sort() 변수 필요 x, 리스트 자체가 바뀜
>>> a = [1,3,5,2,7]
>>> a.sort()
>>> a
[1, 2, 3, 5, 7]
# sort()는 변수에 담을 수 없음
>>> result = a.sort()
>>> result
>>> print(result)
None
# sorted() 변수 필요 o , 리스트 자체가 바뀌지 않음
>>> b = [1,3,5,2,7]
>>> sorted(b)
[1, 2, 3, 5, 7]
>>> b
[1, 3, 5, 2, 7]
>>> c = sorted(b)
>>> c
[1, 2, 3, 5, 7]
차이점 3. sort, sorted의 key옵션
reverse
: True이면 내림차순, False이면 오름차순으로 정렬
key
: 정렬할 기준을 정할 수 있다.
lambda
: 익명 함수를 지칭하는 용어로 , 바로 정의하여 사용할 수 있는 함수
ex) key = lambda x : x[1]
>>> student = [["jenny",25],["mina",20],["jimin",30]]
>>> result = sorted(student, key = lambda x : x[1] )
>>> print(result)
[['mina', 20], ['jenny', 25], ['jimin', 30]]
lambda 매개변수 : 표현식
lambda 함수란?
이름없는 함수로 일시적인 함수이다. 함수가 생성된 곳에서만 즉시 사용하고 버릴 수 있다.
return문이 표함되어 있지 x
>>> test = lambda x : x+2
>>> print(test(2))
4
>>> test = lambda x,y : x+y
>>> print(test(2,3))
5
assert 조건, "오류메시지"
조건이 true일 경우 그대로 코드 진행, false인 경우 AssertError 발생
오류메시지는 생략 가능하다.
>>> a = 10
>>> assert a == 100, "a는 100이 아닙니다."
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: a는 100이 아닙니다.
map(함수, 리스트나 튜플 등)
map()은 함수를 객체의 모든 요소에 대해 적용한후 변경된 객체를 반환한다.
map함수의 반환값은 map타입이라서 list혹은 tuple형으로 변환시켜줘야 한다.
>>> def plus(n):
... return n+10
>>> list(map(plus,[1,2,3]))
[11, 12, 13]
>>> a = [1.1,4.1,2.3,4.2]
>>> a = list(map(int,a))
>>> print(a)
[1, 4, 2, 4]
>>> a = [1,2,3,4]
>>> a = list(map(lambda x : x*10, a))
>>> a
[10, 20, 30, 40]
filter(함수(조건),리스트나 튜플 등)
filter()는 리스트나 튜플의 각각의 요소를 함수로 필터링하는 함수이다.
filter함수의 반환값은 filter 타입을 가져 list혹은 tuple형으로 변환시켜줘야 한다.
true면 반환하고 false이면 그 요소는 제거
>>> def test(n):
... return n % 2 == 0
...
>>> numbers = [1,2,3,4,5,6,7]
>>> result = list(filter(test,numbers))
>>> print(result)
[2, 4, 6]
>>> result2 = list(filter(lambda x : x%2==0, numbers))
>>> print(result2)
[2, 4, 6]
csv 파일은 각 라인의 컬럼들이 콤마로 분리된 텍스트 파일 포맷이다.(다른 구분 문자도 사용 가능)
=> 각 열이 특정한 의미를 가진다.
=> 구분자가 ,이고 데이터에 ,가 포함된 경우 큰 따옴표를 이용하여 데이터를 감싼다
csv 파일을 읽기 위해서는 파이썬에 내장된 csv 모듈을 import 한다.
장점 : 같은 데이터를 저장하는데 용량을 적게 소모 , 이해하기 쉽고 직관적인 데이터
단점 : 데이터 오염에 취약함 데이터에 쉼표가 들어갈 경우 지옥.
delimiter
를 기준으로 분리
import csv
f = open('data.csv', 'r', encoding='utf-8')
rdr = csv.reader(file, delimiter=',')
for line in rdr:
print(line)
f.close()