Python 자료형과 문법
쉽게 말하면
Python은 들여쓰기로 블록을 나누는 간결한 언어예요. 시험에는 리스트를 자르는 슬라이싱과 리스트 메서드가 자주 나와요. a[1:3]은 1번부터 3번 '앞'까지, a[-1]은 맨 뒤, a[::-1]은 거꾸로예요. range(1, 10, 3)은 1부터 10 '앞'까지 3씩 뛰어요. 끝 번호는 포함하지 않는다는 것만 기억해도 반은 맞혀요.
시험용 정의
Python은 인터프리터 방식의 객체지향 스크립트 언어로 들여쓰기로 블록을 구분하고 변수 자료형을 따로 선언하지 않는다. 시퀀스 자료형은 리스트[ ](변경 가능), 튜플( )(변경 불가), 문자열이고, 딕셔너리{키: 값}, 세트{ }(중복 없음, 순서 없음)가 있다. 슬라이싱 s[시작:끝:간격]은 끝을 포함하지 않으며 음수 인덱스는 뒤에서부터(−1이 마지막)다. range(시작, 끝, 간격)도 끝을 포함하지 않는다. 리스트 메서드: append(맨 뒤에 요소 하나), extend(여러 요소 이어 붙이기), insert(위치에 삽입), pop(꺼내 삭제, 기본 마지막), remove(값으로 삭제), sort, reverse. 연산자 //는 몫, /는 실수 나눗셈, **는 거듭제곱이다.
비유로 이해하기
슬라이싱은 빵 자르기와 같다. '1번부터 3번까지 잘라 줘'라고 하면 칼은 3번 앞에 들어가서 1, 2번 조각만 준다. 음수 번호는 빵 끝에서부터 센다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 리스트 | [1, 2, 3] 순서 있고 바꿀 수 있는 목록 |
| 튜플 | (1, 2, 3) 순서 있고 바꿀 수 없는 목록 |
| 딕셔너리 | {'a': 1} 키로 값을 찾는 사전 |
| 세트 | {1, 2} 중복 없는 집합. 순서 없음 |
| 슬라이싱 | 시퀀스의 일부를 [시작:끝:간격]으로 잘라 내는 것 |
| 메서드 | 자료형에 딸린 함수 (a.append(4)) |
예제 1: 리스트와 슬라이싱
a = [1, 2, 3, 4, 5] print(a[1:3], a[-1], a[::2], a[::-1]) # [2, 3] 5 [1, 3, 5] [5, 4, 3, 2, 1] a.append([6, 7]) print(len(a)) # 6 (리스트 하나가 요소 하나로 들어감) b = [1, 2] b.extend([3, 4]) # [1, 2, 3, 4] b.insert(0, 0) # [0, 1, 2, 3, 4] b.pop() # 마지막 4 꺼냄 b.remove(2) # 값 2 삭제 print(b) # [0, 1, 3]
예제 2: range, 반복, 문자열
print(list(range(1, 10, 3)), list(range(5, 0, -2)))
# [1, 4, 7] [5, 3, 1]
total = 0
for i in range(1, 6):
if i % 2 == 0:
continue
total += i
print(total) # 1 + 3 + 5 = 9
w = "Hello Python"
print(w[6:], w.upper(), w.split(), len(w), w.find('P'), w[-3:])
# Python HELLO PYTHON ['Hello', 'Python'] 12 6 hon
print(7 // 2, 7 % 2, 7 / 2, 2 ** 10) # 3 1 3.5 1024
print([i * i for i in range(4)]) # [0, 1, 4, 9]
print("ab" * 3) # ababab딕셔너리와 세트
d = {'a': 1, 'b': 2}
d['c'] = 3
print(len(d), d.get('z', 0), list(d.keys())) # 3 0 ['a', 'b', 'c']
s = {1, 2, 2, 3}
print(len(s)) # 3 (중복 제거)기출에서 더 나온 것
| 말 | 뜻 |
|---|---|
| Scrapy | 파이썬으로 만든 웹 크롤링 프레임워크 |
| while True | 조건이 늘 참이라 break가 없으면 끝나지 않고 계속 반복한다 |
| 조건문 | if 조건: … elif 조건: … else: … (else if가 아니라 elif) |
시험에 이렇게 나와요
- 슬라이싱 → s[0:3] 앞 3글자, s[-3:] 뒤 3글자
- 변수 이름 → 숫자로 시작 불가, 공백 불가, 예약어 불가
- 시퀀스지만 바꿀 수 없음 → 튜플 (리스트는 바꿀 수 있음)
- 조건문 → if·elif·else
- 실행 결과 → range·리스트·반복을 따라가며 계산
확인 문제
Q1. a = [1, 2, 3, 4, 5] 일 때 print(a[1:3])의 출력은?
- [2, 3]
- [2, 3, 4]
- [1, 2]
- [1, 2, 3]
정답 보기
1번 [2, 3]
슬라이싱 a[시작:끝]은 시작 인덱스부터 끝 인덱스 바로 앞까지다. 인덱스 1(2)과 2(3) → [2, 3].
Q2. a = [10, 20, 30, 40, 50]; print(a[-2:])의 출력은?
- [40]
- [10, 20, 30]
- [50]
- [40, 50]
정답 보기
4번 [40, 50]
[40, 50]이다. 음수 인덱스 -2는 뒤에서 두 번째(40)이고, 콜론 뒤를 비우면 끝까지 자른다.
Q3. print(list(range(2, 11, 4)))의 출력은?
- [2, 6]
- [2, 6, 10]
- [2, 6, 10, 14]
- [2, 4, 6, 8, 10]
정답 보기
2번 [2, 6, 10]
2, 6, 10. 11은 포함하지 않지만 10은 11 앞이라 포함.
Q4. x = [1, 2]; x.append([3, 4]); print(len(x))의 출력은?
- 오류
- 2
- 4
- 3
정답 보기
4번 3
append는 [3, 4]를 통째로 요소 하나로 넣는다. extend였다면 4.
Q5. Python의 자료형 중 값을 바꿀 수 없는(immutable) 것은?
- 튜플
- 리스트
- 딕셔너리
- 세트
정답 보기
1번 튜플
튜플이다. 문자열도 바꿀 수 없다. 리스트·딕셔너리·세트는 값을 바꿀 수 있다.
헷갈리기 쉬운 O·X
Python에서 7 // 2의 결과는 3.5다.
정답 보기
X //는 몫 3, /가 3.5.
세트는 중복된 값을 저장하지 않는다.
정답 보기
O
Python은 중괄호 { }로 코드 블록을 구분한다.
정답 보기
X 들여쓰기로 구분한다.