한양과학기술고등학교

에듀테크 프로젝트 대시보드

시퀀스 공통 연산

slicing len sum sorted zip enumerate

list·tuple·str·range 가 공유하는 연산과 시퀀스 대상 내장함수.

1. 공통 연산자

연산의미
s[i], s[i:j:k]인덱싱·슬라이싱
s + t연결 (list, tuple, str)
s * n반복
x in s포함 여부
len(s), min(s), max(s)길이·최소·최대
s.index(x), s.count(x)위치·개수

2. 슬라이싱 심화

s = list(range(10))   # [0..9]
s[2:8:2]     # => [2, 4, 6]
s[::-1]      # 뒤집기
s[-3:]       # 마지막 3개
s[:-3]       # 마지막 3개 빼고

# slice 객체로 재사용
first_two = slice(0, 2)
s[first_two]  # => [0, 1]

# 리스트에서 슬라이스 대입/삭제
s[2:5] = []      # 삭제
del s[::2]       # 짝수 인덱스 삭제

3. enumerate — 인덱스와 값 동시에

for i, ch in enumerate("abc"):
    print(i, ch)          # 0 a / 1 b / 2 c

for i, v in enumerate(items, start=1):   # 1부터
    print(f"{i}. {v}")

# range(len(x)) 관용구는 피하고 enumerate 사용

4. zip — 여러 시퀀스 병렬 순회

names = ["김", "이", "박"]
ages = [20, 25, 30]
for name, age in zip(names, ages):
    ...

# 가장 짧은 것에 맞춤 / strict=True 로 길이 불일치 에러 (3.10+)
list(zip([1, 2, 3], ["a", "b"]))   # => [(1,'a'), (2,'b')]

# 언집 (전치)
pairs = [(1, 'a'), (2, 'b')]
nums, chars = zip(*pairs)           # (1, 2), ('a', 'b')

5. sorted / reversed / any / all

sorted([3, 1, 2])                    # => [1, 2, 3]  (새 리스트)
sorted(words, key=str.lower, reverse=True)
sorted(people, key=lambda p: (p.age, p.name))   # 다중 기준

list(reversed([1, 2, 3]))           # => [3, 2, 1]
any(x < 0 for x in nums)            # 하나라도 참
all(x < 0 for x in nums)            # 전부 참  (빈 시퀀스면 True)
sum(nums, start=0)
"".join(reversed("abc"))            # => 'cba' 

6. range

range(5)          # 0,1,2,3,4
range(2, 8)       # 2..7
range(0, 10, 2)   # 0,2,4,6,8
range(10, 0, -1)  # 10..1

# range 는 지연 시퀀스 — 메모리 O(1)
1_000_000 in range(0, 2_000_000, 2)   # => True  (계산으로 판정)
list(range(3))                        # 실제 리스트가 필요할 때만
"가독성은 중요하다 (Readability counts)"