슬라이싱(Slicing)
[문제 - 2023년 2회]
a = "engineer information processing"
b = a[:3]
c = a[4:6]
d = a[28:]
e = b + c + d
print(e)
📍 정답: engneing
슬라이싱
- a[start:end] → start 인덱스부터 end-1 인덱스까지 추출합니다.
- 생략 가능:
- a[:3] → 처음부터 인덱스 2까지
- a[4:] → 인덱스 4부터 끝까지
- a[:] → 전체 문자열 복사
🔍 해설
- a = "engineer information processing"
문자열의 인덱스를 기준으로 보면:
e n g i n e e r i n f o r m a t i o n p r o c e s s i n g
0 1 2 3 4 5 6 7 8 9 ...
- b = a[:3] → "eng"
- c = a[4:6] → "ne" (인덱스 4와 5만 추출)
- d = a[28:] → "ing" (28번째 이후 문자열)
- e = b + c + d → "eng" + "ne" + "ing" → "engneing"
정답: engneing
set(집합)
[문제 - 2023년 1회]
a = {'한국', '중국', '일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update({'홍콩', '한국', '태국'})
print(a)
📍 정답: {‘한국’, ‘중국’, ‘베트남’, ‘홍콩’, ‘태국’}
(※ 집합은 순서 없음)
set
- 중복 허용 X, 순서 없음
- .add(value) → 값 1개 추가
- .remove(value) → 값 1개 삭제
- .update({set}) → 여러 값 한꺼번에 추가 (중복은 무시)
🔍 해설
- 초기 집합: {'한국', '중국', '일본'}
- '베트남' 추가 → {'한국', '중국', '일본', '베트남'}
- '중국' 중복 추가 → 변화 없음
- '일본' 삭제 → {'한국', '중국', '베트남'}
- update({'홍콩', '한국', '태국'}) → '한국'은 이미 있으므로 무시
최종 집합: {‘한국’, ‘중국’, ‘베트남’, ‘홍콩’, ‘태국’}
람다(lambda) + map 함수 해설
TestList = [1, 2, 3, 4, 5]
TestList = list(map(lambda num: num + 100, TestList))
print(TestList)
📍 정답: [101, 102, 103, 104, 105]
- lambda는 익명 함수를 정의할 때 사용
- map(함수, 리스트) → 각 요소에 함수 적용
🔍 해설
- 각 요소에 +100을 적용: [1+100, 2+100, ..., 5+100]
- 결과: [101, 102, 103, 104, 105]
문자열 처리 + 슬라이싱
x = input()
x = x.capitalize()
y = x.split()
print(y[0][::2], end='*')
print(y[1][3:6])
📍 정답: Pto*gra
- .capitalize() → 첫 글자만 대문자
- .split() → 공백 기준으로 나눠 리스트로 반환
- y[0][::2] → 첫 단어의 0, 2, 4번째 문자
- y[1][3:6] → 두 번째 단어의 3~5번 문자
🔍 해설
- x = "python programming" → capitalize() → "Python programming"
- split 후: y = ["Python", "programming"]
- y[0][::2] → "Pto"
- y[1][3:6] → "gra"
- 출력: Pto*gra
range, split, find 함수 활용 문제
arr_str = input('input String :').split('-')
arr_len = int(input('input number : '))
arr_val = list(range(0, arr_len, 2))
arr_val.remove(4)
print(arr_str[1].find('i') + arr_val[2])
입력:
input string : information-technology
input number : 12
📍 정답: 5
- .split('-')는 문자열을 '-' 기준으로 잘라서 리스트로 만들어주는 함수
- range(start, stop, step) → 간격 생성
- .find('i') → 문자 'i'의 첫 등장 위치 반환 (없으면 -1)
🔍 해설
- arr_str → ["information", "technology"]
- arr_len = 12 사용자가 입력한 값 "12"를 정수로 바꿈
- arr_val → range(0, 12, 2) → [0, 2, 4, 6, 8, 10]
- → 0부터 12 미만까지 2씩 증가하는 숫자들을 생성
- list()로 감싸서 리스트로 만들기
- remove(4) → [0, 2, 6, 8, 10]
- 'technology'.find('i') → 없음 → -1
- arr_str[1] → "technology"
- "technology".find('i')는 문자 'i'가 처음 나오는 위치를 반환
- 중요 포인트: "technology"에는 'i'가 없음
- arr_val[2] = 6
- 현재 arr_val = [0, 2, 6, 8, 10]
- arr_val[2]는 세 번째 요소인 6
- 결과: print(-1 + 6) → 5
서식 문자열 포맷 출력 문제
i = 20
f = 123456.789E-3
print('%d\n%d' % (i, i), end = '/')
print('%.3f' % f)
📍 정답:
20
20/123.457
- %d → 정수 출력
- %.3f → 소수점 셋째 자리까지 실수 출력 (자동 반올림)
- E-3 → 10⁻³ = 0.001 (지수 표현식)
🔍 해설
- f = 123456.789E-3 = 123.456789
- E-3은 지수 표현식으로, 10의 -3제곱을 의미합니다.
- 즉, 123456.789 × 0.001 = 123.456789
- print('%d\n%d' % (i, i), end = '/')
- '%d\n%d' % (i, i)
- '%d': 정수 출력 포맷
- \n: 줄바꿈
- i, i → 각각 20이므로
→ 출력 결과는 아래와 같습니다: - 20
20 - 하지만 바로 줄바꿈하는 대신, end='/'가 붙어 있어서
줄바꿈 후 다음 줄 끝에 / 문자를 붙입니다. - 20
20/
요약
슬라이싱 | 문자열[시작:끝] → 끝은 포함 X |
set | 중복 X, 순서 없음, add, remove, update |
람다 | lambda 인자: 표현식 |
map | 리스트 모든 요소에 함수 적용 |
capitalize | 첫 글자 대문자 |
find | 해당 문자의 첫 등장 위치 (없으면 -1) |
range | range(시작, 끝, 간격) |
포맷 출력 | %d, %.2f 등으로 출력 제어 |