공든탑앱 열기

Python 자료형과 문법

정보처리기사 · 프로그래밍 언어 · 약 15분

쉽게 말하면

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)

시험에 이렇게 나와요

확인 문제

Q1. a = [1, 2, 3, 4, 5] 일 때 print(a[1:3])의 출력은?

  1. [2, 3]
  2. [2, 3, 4]
  3. [1, 2]
  4. [1, 2, 3]
정답 보기

1번 [2, 3]

슬라이싱 a[시작:끝]은 시작 인덱스부터 끝 인덱스 바로 앞까지다. 인덱스 1(2)과 2(3) → [2, 3].

Q2. a = [10, 20, 30, 40, 50]; print(a[-2:])의 출력은?

  1. [40]
  2. [10, 20, 30]
  3. [50]
  4. [40, 50]
정답 보기

4번 [40, 50]

[40, 50]이다. 음수 인덱스 -2는 뒤에서 두 번째(40)이고, 콜론 뒤를 비우면 끝까지 자른다.

Q3. print(list(range(2, 11, 4)))의 출력은?

  1. [2, 6]
  2. [2, 6, 10]
  3. [2, 6, 10, 14]
  4. [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))의 출력은?

  1. 오류
  2. 2
  3. 4
  4. 3
정답 보기

4번 3

append는 [3, 4]를 통째로 요소 하나로 넣는다. extend였다면 4.

Q5. Python의 자료형 중 값을 바꿀 수 없는(immutable) 것은?

  1. 튜플
  2. 리스트
  3. 딕셔너리
  4. 세트
정답 보기

1번 튜플

튜플이다. 문자열도 바꿀 수 없다. 리스트·딕셔너리·세트는 값을 바꿀 수 있다.

헷갈리기 쉬운 O·X

Python에서 7 // 2의 결과는 3.5다.

정답 보기

X //는 몫 3, /가 3.5.

세트는 중복된 값을 저장하지 않는다.

정답 보기

O

Python은 중괄호 { }로 코드 블록을 구분한다.

정답 보기

X 들여쓰기로 구분한다.

함께 보면 좋은 개념