파이썬 2
리스트
numbers = [1, 2, 3, 4, 5]
리스트 안의 값들을 요소라고 한다.
인덱싱
리스트에서 요소의 위치를 인덱스라고 하고 인덱스를 통해 요소를 받아 오는걸 인덱싱이라 한다.
numbers = [1, 2, 3, 4, 5]
print(numbers[0]) -> 1
print(numbers[1]) -> 2
마이너스 인덱스는 뒤에서 부터 센다.
print(numbers[-1]) -> 5
print(numbers[-2]) -> 4
값을 바꿀 수 도 있다.
numbers[0] = 7
print(numbers) -> [7, 2, 3, 4, 5]
리스트 슬라이싱
numbers = [1, 2, 3, 4, 5]
print(numbers[0:2]) -> [1, 2]
인덱스 0부터 1까지를 자른다.
print(numbers[1:]) -> [2, 3, 4, 5]
인덱스 1부터 끝까지를 자른다.
print(numbers[:3]) -> [1, 2, 3]
인덱스 처음부터 2까지를 자른다.
리스트 함수
len()
리스트에 요소가 몇개 있는지 리턴한다.
numbers = [1, 2, 3, 4, 5]
print(len(numbers)) -> 5
.append()
기존의 리스트에 값을 추가할 때 사용한다. 값은 리스트의 가장 오른쪽에 추가된다.
numbers = [1, 2, 3, 4, 5]
numbers.append(7)
print(numbers) -> [1, 2, 3, 4, 5, 7]
del
리스트에 요소를 삭제할때 사용한다.
numbers = [1, 2, 3, 4, 5]
del numbers[3]
print(numbers) -> [1, 2, 3, 5]
3번 인덱스의 요소가 삭제됐다.
.insert()
리스트에 요소를 삽입할 때 사용한다.
numbers = [1, 2, 3, 4, 5]
numbers.insert(2, 7)
print(numbers) -> [1, 2, 7, 3, 4, 5]
2번 인덱스에 7이 삽입됐다.
리스트 정렬
sorted()
sorted함수는 기존의 리스트를 건드리지 않고 정렬된 새로운 리스트를 만들어서 리턴한다.
numbers = [5, 3, 4, 1, 2]
print(sorted(numbers)) -> [1, 2, 3, 4, 5]
print(sorted(numbers, reverse=True)) -> [5, 4, 3, 2, 1]
print(numbers) -> [5, 3, 4, 1, 2]
기존의 리스트인 numbers를 출력하면 원래의 모습 그대로다.
.sort()
sort함수는 기존의 리스트를 재정렬하고 아무것도 리턴하지 않는다.
numbers = [5, 3, 4, 1, 2]
numbers.sort()
print(numbers.sort(reverse=True)) -> None
print(numbers) -> [5, 4, 3, 2, 1]
기존의 리스트인 numbers를 출력하면 값이 바뀌어 있다.
in
리스트에 어떤 값이 있는지 확인할 수 있다.
numbers = [5, 3, 4, 1, 2]
print(5 in numbers) -> True
print(7 in numbers) -> False
반대로 값이 없는지 확인하려면 not을 붙이면 된다.
print(7 not in numbers) -> True
nested list
리스트 안에 또다른 리스트를 말한다.
numbers = [[1, 2, 3], [5, 6, 7]]
print(numbers[0]) -> [1, 2, 3]
print(numbers[1]) -> [5, 6, 7]
print(numbers[0][1]) -> 2
print(numbers[1][2]) -> 7
.reverse()
값들을 뒤집어진 순서로 배치한다.
numbers = [1, 2, 3, 4, 5]
numbers.reverse()
print(numbers) -> [5, 4, 3, 2, 1]
.index()
해당 값을 가지고 있는 인덱스를 리턴해 준다.
numbers = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
print(numbers.index(‘a’)) -> 0
.remove()
첫 번째로 해당 값을 가지고 있는 원소를 삭제한다.
numbers = [‘a’, ‘b’, ‘c’, ‘a’, ‘e’]
numbers.remove(‘a’)
print(numbers) -> [‘b’, ‘c’, ‘a’, ‘e’]
for 반복문
for 변수 in 리스트/튜플/문자열:
수행 부분
numbers = [1, 2, 3, 4, 5]
for i in numbers:
print(i)
numbers리스트의 처음 인덱스 부터 변수 i에 들어가면서 반복된다.
range()
range함수를 쓰면 리스트를 작성하지 않아도 돼서 메모리 효율성이 좋다.
파라미터 1개
for i in range(stop):
print(i)
0부터stop - 1까지
for i in range(10):
print(i)
0부터 9까지 출력된다.
파라미터 2개
for i in range(start, stop):
print(i)
start부터 stop - 1까지
for i in range(1, 11):
print(i)
1부터 10까지 출력된다.
파라미터 3개
for i in range(start, stop, step):
print(i)
start부터 stop - 1까지, 간격 step
for i in range(1, 11, 3):
print(i)
1, 4, 7, 10이 출력된다.
사전
Key와 value가 한 쌍을 이룬다.
dict = {
5: 25,
2: 4,
3: 9
}
콜론 기준으로 왼쪽이 key, 오른쪽이 value다.
키를 사용해 값을 가져올 수 있다.
print(dict[3]) -> 9
새로운 쌍을 추가하려면 이렇게 한다.
dict[7] = 70
print(dict) -> {5: 25, 2: 4, 3: 9, 7: 70}
리스트와 사전의 차이점
리스트는 인덱스가 순서대로 올라가지만 사전은 키를 순서에 상관없이 아무렇게나 지정할 수 있다.
리스트의 인덱스는 정수형이지만 사전의 키는 아무 자료형이나 쓸 수 있다.
.values()
-
사전에 있는 값들을 확인할 수 있다.
print(dict.values()) -> dict_values([25, 4, 9]) -
사전에 특정 값이 있는지 확인할 수 있다.
print(25 in dict.values()) -> True -
for문 for value in dict.values(): print(value) -> 25, 4, 9
.keys()
-
사전에 있는 키들을 확인할 수 있다.
print(dict.keys()) -> dict_keys([5, 2, 3]) -
사전에 특정 키가 있는지 확인할 수 있다.
print(5 in dict.keys()) -> True -
for문 for key in dict.keys(): print(key) -> 5, 2, 3
.items()
for key in dict.keys():
value = dict[key]
print(key, value)
이 과정을 items를 사용해 간단히 할 수 있다.
for key, value in dict.items():
print(key, value)
key와 value를 동시에 받아올 수 있다.
aliasing
가변형 : dict, list
불변형 : tuple, str, int, bool, float
a = 5 가 있으면 a가 5를 참조한다고 한다.
변수 = 객체 는 변수가 객체를 참조하는 것이다.
x = 5
y = x
y = 3
print(x)
print(y)
x = 5 —> 5를 x가 참조한다.
y = x —> 동일한 5를 y가 참조한다.
현재 x와 y는 같은 5를 참조한다.
이 상태에서 y = 3 을 하면 5가 3으로 바껴야 겠지만 정수는 불변형이므로 새로운 3을 만들고 그 3을 y가 참조한다.
그래서 x는 5와 y는 3이 출력된다.
x = [1, 2, 3]
y = x
y[2] = 7
print(x)
print(y)
x = [1, 2, 3] —> 리스트를 x가 참조한다.
y = x —> 동일한 리스트를 y가 참조한다.
현재 x와 y는 같은 리스트를 참조한다.
이 상태에서 y[2] = 7 을 하면 리스트는 가변형이므로 현재 리스트의 2번 인덱스 값이 7로 바뀐다.
여전히 x와 y는 동일한 리스트를 참조하므로 x와 y의 출력값은 [1, 2, 7]로 동일하다.
여기서 y는 x의 가명(alias)이라고 한다. 이름은 다르나 같은 값이라는 말이다.
가변형 타입에서 이런 문제를 해결하려면 list함수를 사용하면 된다.
list()
x = [1, 2, 3]
y = list(x)
y[2] = 7
print(x)
print(y)
list함수는 새로운 리스트를 생성한다.
기존의 방식에서 y = x 는 같은 리스트를 참조하는 반면에 y = list(x)는 x리스트의 복제본을 새로 생성하고 새로 생성된 리스트를 y가 참조한다.
그래서 x와 y는 서로 다른 리스트를 참조하게 되고 y[2] = 7 을 해서 값을 변화시키면 y가 참조하고 있는 리스트의 값만 변경된다.
리스트와 문자열
리스트와 문자열은 구조적으로 비슷하다.
인덱싱, for반복문, 슬라이싱, 덧셈연산, len함수 들을 동일한 방법으로 사용할 수 있다.
다만 문자열은 리스트와 달리 수정이 불가능하다.
numbers = [1, 2, 3, 4, 5]
numbers[0] = 7
리스트는 수정이 가능하지만
numbers = "12345"
numbers[0] = 7
문자열은 에러가 나게된다.
문자열에 덧셈연산이 가능한 것은 str = ‘abc’ + ‘asd” 는 문자열을 수정한게 아니라 새로운 문자열을 생성한 것이기 때문이다.
모듈
모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이다.
같은 폴더에 있는 파이썬 파일은 import 파일이름 으로 불러올 수 있다.
import calculator
print(calculator.add(2, 5))
calculator모듈에서 add함수를 가져와 사용한다.
import calculator as cal
print(cal.add(2, 5))
이렇게 불러온 모듈의 이름을 대체할 수 도 있다.
from calculator import add
print(add(2, 5))
이렇게 특정 함수를 불러와 모듈을 생략하고 사용할 수 있다.
스탠다드 라이브러리
파이썬을 설치할 때 스탠다드 라이브러리도 포함되어 있다.
random
import random
print(random.random())
print(random.randint(1, 20))
print(random.uniform(0, 1))
random함수는 랜덤한 수를 리턴한다.
randint함수는 두 수 사이의 랜덤한 정수를 리턴한다.
위의 경우에는 1 <= N <= 20
uniform함수는 두 수 사이의 랜덤한 소수를 리턴한다.
위의 경우에는 1 <= N <= 1
datetime
import datetime
day = datetime.datetime(2020, 10, 10)
day1 = datetime.datetime(2020, 10, 10, 20, 31, 27)
day2 = datetime.datetime.now()
day3 = day2 = day1
print(day1.year)
print(day1.strftime("%A, %B %dth %Y"))
datetime으로 시간을 생성할 수 있다.
datetime.now로 현재 시간을 생성한다.
시간끼리 차를 구할 수 도 있다.
datetime값에서 연도, 월 같은 값들을 추출할 수 있다. year, month, day, hour, minute, second, microsecond
strftime을 사용해 datetime을 포맷팅 할 수 있다.
input
사용자로 부터 정보를 받을 수 있다.
val = input("값을 입력하세요 : ")
print(val)
input이 받는 사용자 입력은 항상 문자열이다.
파일 읽기/쓰기
파일 읽기
with open('파일이름', 'r') as f:
for line in f:
print(line)
파일이 다른 폴더에 있다면 ‘폴더이름/파일이름’ 이렇게 하면 된다.
읽어 들인 파일을 f라는 변수에 저장한다.
for문을 돌려 내용을 출력할 수 있다.
한글 관련된 문제가 생기면 UTF-8을 추가해 주면 된다.
with open('파일이름', 'r', encoding='UTF-8') as f:
for line in f:
print(line)
.strip()
문자열 앞뒤의 화이트 스페이스를 제거해 준다.
print(" abc asd ".strip())
결과 - “abc asd”
외부 파일을 읽을 때 작성한 파일에서 줄바꿈이 있다면 print함수에서도 자동으로 줄바꿈을 하기 때문에 줄바꿈이 두번이 된다.
이렇때 사용하면 유용하다.
with open('파일이름', 'r') as f:
for line in f:
print(line.strip())
.split()
numbers = “1. 2. 3. 4. 5”
print(numbers.split(“.”)) -> [‘1’, ‘ 2’, ‘ 3’, ‘ 4’, ‘ 5’]
특정 문자를 기준으로 분리시킨다.
파라미터를 넣어 주지 않으면 split() 화이트 스페이스를 기준으로 한다.
리스트의 값들은 항상 문자열로 나온다.
파일 쓰기
with open('파일이름', 'w') as f:
f.write("내용입력")
f.write("내용입력")
현재 위치한 폴더에 생성된다.
기존의 파일을 수정하면 덮어씌워 진다.
기존의 파일에 추가를 하려면
with open('파일이름', 'a') as f:
f.write("내용입력")
f.write("내용입력")
해당 이름의 파일이 있으면 기존의 내용 뒤에 추가가 된다.
해당 이름의 파일이 없으면 새로 만든다.
ternary expression
condition = True
condition_str = "nice" if condition else "not nice"
print(condition_str)
condition이 참일 때는 nice가 되고 거짓일 때는 not nice가 된다.
if else문을 간략하게 나타낼 수 있다.
list comprehention
list = [1, 2, 3, 4, 5]
squares = []
for x in list:
squares.append(x ** 2)
print(squares)
list = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in list]
print(squares)
새로운 리스트를 간단하게 만드는 방법이다.
Leave a comment