[리스트 자료형]
- 리스트 만들기
리스트를 이용하면 숫자를 간단히 표현 가능
ex)
>>> odd = [1, 3, 5, 7, 9]
- 리스트 만들 땐 대괄호로 감싼 후 요솟값은 쉼표로 구분
ex)
리스트명 = [요소1, 요소2, 요소3, ...]
- 리스트의 생김새
ex)
>>> a = []
>>> b = [1, 2, 3]
>>> c = ['Life', 'is', 'too', 'short']
>>> d = [1, 2, 'Life', 'is']
>>> e = [1, 2, ['Life', 'is']]
- 비어있는 리스트 생성
a = list()
- 리스트의 인덱싱
a 변수에 [1,2,3] 설정, a[0]는 리스트 a의 첫번째 요솟값 의미
ex)
>>> a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[0]
1
리스트 첫번째 요소와 세번째 요소 더한 값
ex)
>>> a[0] + a[2]
4
이건 1+3으로 4값을 출력한다
ex)
>>> a[-1]
3
1,2,3과 또 다른 리스트 포함
ex)
>>> a = [1, 2, 3, ['a', 'b', 'c']]
>>> a[0]
1
>>> a[-1]
['a', 'b', 'c']
>>> a[3]
['a', 'b', 'c']
a[-1]은 마지막 요솟값인 ['a', 'b', 'c']를 나타냄
a[3]은 a의 네번째 요소기 때문에 a[-1]과 동일한 결괏값
ex)
>>> a[-1][0]
'a'
- 리스트 a에 포함된 ['a', 'b', 'c'] 리스트에서 'a' 값을 인덱싱을 사용해 끄집어내기
마찬가지 예시
>>> a[-1][1]
'b'
>>> a[-1][2]
'c'
** 삼중 리스트 인덱싱하기
ex)
>>> a = [1, 2, ['a', 'b', ['Life', 'is']]]
리스트 a안에 ['a', 'b', ['Life', 'is']] 리스트가 포함,
그 리스트 안에 ['Life', 'is'] 리스트가 포함으로 삼중구조
ex)
>>> a[2][2][0]
'Life'
리스트 a의 세 번째 요소인 리스트 ['a', 'b', ['Life', 'is']]의
세번째 요소인 리스트 ['Life', 'is']의 첫 번째 요소!
- 리스트 슬라이싱
ex)
>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]
ex)
>>> a = "12345"
>>> a[0:2]
'12'
ex)
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]
>>> c = a[2:]
>>> b
[1, 2]
>>> c
[3, 4, 5]
b변수 : 리스트 a 첫번째 요소~두번째 요소인 a[1]까지
c변수 : 리스트 a의 세 번째 요소~끝까지
** 중첩된 리스트에서 슬라이싱
ex)
>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5]
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]
['a', 'b']
a[3]은 ['a', 'b', 'c']이고 a[3][:2]는 ['a', 'b', 'c'] 첫번째 요소~세번째 요소 직전이라 ['a', 'b']이다
[리스트 연산하기]
- 리스트 더하기
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
리스트 사이에서 +는 2개 리스트 합하는 것
"abc" + "def" = "abcdef" 문자열 합과 같은 이치다
- 리스트 반복하기
>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
리스트가 세번 반복되어 리스트를 만들어냄
- 리스트 길이 구하기
리스트 길이를 위해선 len 함수 사용
>>> a = [1, 2, 3]
>>> len(a)
3
** 초보자의 리스트 연산 오류 주의
>>> a = [1, 2, 3]
>>> a[2] + "hi"
a[2]의 값인 3과 문자열 hi가 더해져서 3hi가 출력될 것
이라고 예상했다면 전혀 아님! 오류난다
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
( 오류 문구 )
a[2]에 저장된 값은 3이라는 정수인데 "hi"는 문자열,
정수와 문자열은 더할 수 없어 오류 발생
>>> str(a[2]) + "hi"
3hi
3hi를 만들려면 숫자 3을 문자 3으로 바꿔야 함
* str은 정수나 실수를 문자열로 바꾸어 주는 파이썬의 내장 함수
[리스트의 수정과 삭제]
- 리스트의 값 수정하기
ex)
>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]
a[2]의 요솟값 3이 4
- del 함수로 리스트 요소 삭제하기
>>> a = [1, 2, 3]
>>> del a[1]
>>> a
[1, 3]
del a[x]는 x번째 요솟값 삭제,
>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]
슬라이싱 기법을 사용해서 리스트 요소 여러개 삭제 가능
[ 리스트 관련 함수 ]
리스트 변수 이름 뒤에 '.'을 붙여 리스트 관련 함수 사용
- 리스트에 요소 추가 (append)
append(x)는 리스트의 맨 마지막에 x를 추가하는 함수
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
리스트 안에 자료형도 추가 가능
>>> a.append([5, 6])
>>> a
[1, 2, 3, 4, [5, 6]]
- 리스트 정렬 (sort)
>>> a = [1, 4, 3, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4]
리스트의 요소를 순서대로 정렬
>>> a = ['a', 'c', 'b']
>>> a.sort()
>>> a
['a', 'b', 'c']
- 리스트 뒤집기 (reverse)
reverse 함수는 리스트를 역순으로 뒤집어줌. 현재 리스트 상태 그대로 거꾸로 뒤집음.
>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']
- 인덱스 반환 (index)
리스트에 x값이 있으면 x의 인덱스 값을 리턴함
>>> a = [1, 2, 3]
>>> a.index(3)
2
>>> a.index(1)
0
리스트 a에 있는 숫자 3의 위치는 a[2] 이므로 2, 숫자 1의 위치는 a[0]이므로 0을 리턴
ex)
>>> a.index(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 0 is not in list
0은 a리스트에 존재하지 않아서 나오는 오류
- 리스트에 요소 삽입 (insert)
insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수
>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]
- 리스트 요소 제거 (remove)
remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
>>> a
[1, 2, 1, 2, 3]
a가 3이라는 값을 2개 가지고 있을 경우, 첫 번째 3만 제거
- 리스트 요소 끄집어 내기 - pop
>>> a = [1, 2, 3]
>>> a.pop()
3
>>> a
[1, 2]
pop(x)는 리스트의 x번째 요소를 리턴하고 그 요소는 삭제
>>> a = [1, 2, 3]
>>> a.pop(1)
2
>>> a
[1, 3]
- 리스트에 포함된 요소 x의 개수 세기 - count
>>> a = [1, 2, 3, 1]
>>> a.count(1)
2
- 리스트 확장 - extend
>>> a = [1, 2, 3]
>>> a.extend([4, 5])
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]
* a += [4, 5]는 a = a + [4, 5]와 동일한 표현식
[딕셔너리]
연관배열, 해시
- 딕셔너리 기본 모습
{Key1: Value1, Key2: Value2, Key3: Value3, ...}
Key로 정숫값 1, Value로 문자열 'hi'를 사용한 예
>>> a = {1: 'hi'}
- 딕셔너리 쌍 추가
>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}
- 딕셔너리 요소 삭제
>>> del a[1]
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}
- 딕셔너리 key 사용해 Value 얻기
>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
- 딕셔너리 주의사항
>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}
동일한 Key가 2개 존재할 경우, 1: 'a' 쌍이 무시
[딕셔너리 관련 함수]
- key 리스트
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
a.keys()는 딕셔너리 a의 Key만을 모아 dict_keys 객체를 리턴
- Value 리스트 만들기 - values
>>> a.values()
dict_values(['pey', '010-9999-1234', '1118'])
- Key, Value 쌍 얻기 - items
>>> a.items()
dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
- Key: Value 쌍 모두 지우기 - clear
>>> a.clear()
>>> a
{}
- Key로 Value 얻기 - get
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'010-9999-1234'
- 해당 Key가 딕셔너리 안에 있는지 조사하기 - in
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False
[ if 문 ]
ex)
>>> money = True
>>> if money:
... print("택시를 타고 가라")
... else:
... print("걸어 가라")
...
택시를 타고 가라
- if 문의 기본 구조
if 조건문:
수행할_문장1
수행할_문장2
...
else:
수행할_문장A
수행할_문장B
...
- 들여쓰기 방법
if 조건문:
수행할_문장1
수행할_문장2
수행할_문장3
ex)
# indent_error2.py
money = True
if money:
print("택시를")
print("타고")
print("가라")
- 조건문이란 ?
참과 거짓을 판단하는 문장
>>> money = True
>>> if money:
- 비교 연산자
x < y : x가 y보다 작다.
x > y : x가 y보다 크다.
x == y : x와 y가 같다.
x != y : x와 y가 같지 않다.
x >= y : x가 y보다 크거나 같다.
x <= y : x가 y보다 작거나 같다.
ex)
>>> x = 3
>>> y = 2
>>> x > y
True
>>> x == y
False
ex)
>>> money = 2000
>>> if money >= 3000:
... print("택시를 타고 가라")
... else:
... print("걸어가라")
...
걸어가라
>>>
- and, or, not
x or y : x와 y 둘 중 하나만 참이어도 참이다.
x and y : x와 y 모두 참이어야 참이다.
not x : x가 거짓이면 참이다.
ex)
돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 가고, 그렇지 않으면 걸어가라
>>> money = 2000
>>> card = True
>>> if money >= 3000 or card:
... print("택시를 타고 가라")
... else:
... print("걸어가라")
...
택시를 타고 가라
>>>
- in, not in
x in 리스트 : x not in 리스트
x in 튜플 : x not in 튜플
x in 문자열 : x not in 문자열
ex)
>>> 1 in [1, 2, 3]
True
>>> 1 not in [1, 2, 3]
False
- 다양한 조건을 판단하는 elif
주머니에 돈이 있으면 택시를 타고 가고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고 가고, 돈도 없고 카드도 없으면 걸어가라.
>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
... print("택시를 타고가라")
... else:
... if card:
... print("택시를 타고가라")
... else:
... print("걸어가라")
...
택시를 타고가라
>>>
** 이떼 elif를 이용하면
>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
... print("택시를 타고가라")
... elif card:
... print("택시를 타고가라")
... else:
... print("걸어가라")
...
택시를 타고가라
- if 문을 한줄로 작성
>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket: pass
... else: print("카드를 꺼내라")
...
if 문 다음에 수행할 문장을 콜론(:) 뒤에 바로 적었다. else 문 역시 마찬가지이다.
- 조건부 표현식
if score >= 60:
message = "success"
else:
message = "failure"
파이썬의 조건부 표현식(conditional expression)을 사용하면 간단 표현
message = "success" if score >= 60 else "failure"
[ while 문 ]
문장을 반복해서 수행해야 할 경우 while 문을 사용한다. 그래서 while 문을 ‘반복문’이라고도 부른다.
- while 문의 기본 구조
while 조건문:
수행할_문장1
수행할_문장2
수행할_문장3
...
ex)
>>> treeHit = 0
>>> while treeHit < 10:
... treeHit = treeHit +1
... print("나무를 %d번 찍었습니다." % treeHit)
... if treeHit == 10:
... print("나무 넘어갑니다.")
...
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무 넘어갑니다.
- while 문 만들기
>>> prompt = """
... 1. Add
... 2. Del
... 3. List
... 4. Quit
...
... Enter number: """
>>>
- while 문 강제로 빠져나가기
ex)
>>> coffee = 10
>>> money = 300
>>> while money:
... print("돈을 받았으니 커피를 줍니다.")
... coffee = coffee -1
... print("남은 커피의 양은 %d개입니다." % coffee)
... if coffee == 0:
... print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
... break
...
- while 문의 맨 처음으로 돌아가기
>>> a = 0
>>> while a < 10:
... a = a + 1
... if a % 2 == 0: continue
... print(a)
...
1
3
5
7
9
- 무한 루프
while True:
수행할_문장1
수행할_문장2
...
ex)
>>> while True:
... print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
...
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
....
[ 튜플 특징 ]
튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하다
- 리스트는 [], 튜플은 ()으로 둘러싼다.
- 리스트는 요솟값의 생성, 삭제, 수정이 가능하지만, 튜플은 요솟값을 바꿀 수 없다.
- 튜플 만들기
t1 = ()
t2 = (1,)
t3 = (1, 2, 3)
t4 = 1, 2, 3
t5 = ('a', 'b', ('ab', 'cd'))
- 튜플 요솟값 삭제
>>> t1 = (1, 2, 'a', 'b')
>>> del t1[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
- 튜플 요솟값 변경
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0] = 'c'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
- 튜플 다루기
1. 인덱싱
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
>>> t1[3]
'b'
2. 슬라이싱
>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')
3. 튜플 더하기
>>> t1 = (1, 2, 'a', 'b')
>>> t2 = (3, 4)
>>> t3 = t1 + t2
>>> t3
(1, 2, 'a', 'b', 3, 4)
4. 튜플 곱하기
>>> t2 = (3, 4)
>>> t3 = t2 * 3
>>> t3
(3, 4, 3, 4, 3, 4)
5. 튜플 길이 구하기
>>> t1 = (1, 2, 'a', 'b')
>>> len(t1)
4