1. append()
리스트.append(값)
리스트 맨 뒤에 값 추가
# 성공: 리스트 끝에 값 추가
nums = [1, 2, 3]
nums.append(4)
print(nums) # [1, 2, 3, 4]
# 성공: 문자열도 추가 가능
fruits = ["apple", "banana"]
fruits.append("orange")
print(fruits) # ['apple', 'banana', 'orange']
# 주의: 원본 리스트가 직접 변경됨
nums = [1, 2, 3]
result = nums.append(4)
print(nums) # [1, 2, 3, 4]
print(result) # None
2. extend()
리스트.extend(반복가능한값)
리스트 맨 뒤에 여러 값 추가
# 성공: 리스트에 리스트 값 추가
nums = [1, 2]
nums.extend([3, 4])
print(nums) # [1, 2, 3, 4]
# 성공: 문자열을 넣으면 한 글자씩 추가
chars = ["a"]
chars.extend("bc")
print(chars) # ['a', 'b', 'c']
# 주의: append()와 결과가 다름
nums = [1, 2]
nums.append([3, 4])
print(nums) # [1, 2, [3, 4]]
nums = [1, 2]
nums.extend([3, 4])
print(nums) # [1, 2, 3, 4]
3. insert()
리스트.insert(위치, 값)
원하는 위치에 값 추가
# 성공: 1번 위치에 값 추가
nums = [1, 3, 4]
nums.insert(1, 2)
print(nums) # [1, 2, 3, 4]
# 성공: 맨 앞에 값 추가
nums = [2, 3]
nums.insert(0, 1)
print(nums) # [1, 2, 3]
# 주의: 위치가 리스트 길이보다 크면 맨 뒤에 추가됨
nums = [1, 2]
nums.insert(100, 3)
print(nums) # [1, 2, 3]
4. remove()
리스트.remove(값)
리스트에서 특정 값 제거
# 성공: 특정 값 제거
nums = [1, 2, 3]
nums.remove(2)
print(nums) # [1, 3]
# 성공: 첫 번째로 찾은 값만 제거
nums = [1, 2, 2, 3]
nums.remove(2)
print(nums) # [1, 2, 3]
# 주의: 없는 값을 제거하면 에러 발생
nums = [1, 2, 3]
nums.remove(10) # ValueError
5. pop()
리스트.pop()
리스트.pop(위치)
리스트 값 제거 후 반환
# 성공: 마지막 값 제거
nums = [1, 2, 3]
result = nums.pop()
print(result) # 3
print(nums) # [1, 2]
# 성공: 특정 위치 값 제거
nums = [1, 2, 3]
result = nums.pop(0)
print(result) # 1
print(nums) # [2, 3]
# 주의: 빈 리스트에서 사용 시 에러 발생
nums = []
nums.pop() # IndexError
6. clear()
리스트.clear()
리스트 전체 비우기
# 성공: 모든 요소 제거
nums = [1, 2, 3]
nums.clear()
print(nums) # []
# 주의: 원본 리스트 자체가 변경됨
nums = [1, 2, 3]
result = nums.clear(
print(result) # None
7. index()
리스트.index(값)
특정 값의 위치 찾기
# 성공: 값의 위치 반환
nums = [10, 20, 30]
result = nums.index(20)
print(result) # 1
# 성공: 첫 번째 위치만 반환
nums = [1, 2, 2, 3]
print(nums.index(2)) # 1
# 주의: 값이 없으면 에러 발생
nums = [1, 2, 3]
nums.index(10) # ValueError
8. count()
리스트.count(값)
특정 값 개수 세기
# 성공: 값 개수 반환
nums = [1, 2, 2, 3]
result = nums.count(2)
print(result) # 2
# 성공: 없는 값은 0 반환
nums = [1, 2, 3]
print(nums.count(10)) # 0
# 주의: 완전히 같은 값만 셈
nums = [1, "1", 1
print(nums.count(1)) # 2
9. sort()
리스트.sort()
리스트 정렬
# 성공: 오름차순 정렬
nums = [3, 1, 2]
nums.sort()
print(nums) # [1, 2, 3]
# 성공: 문자열 정렬
fruits = ["banana", "apple", "orange"]
fruits.sort()
print(fruits) # ['apple', 'banana', 'orange']
# 주의: 원본 리스트 자체가 변경됨
nums = [3, 1, 2]
result = nums.sort()
print(nums) # [1, 2, 3]
print(result) # None
# 주의: 타입이 섞이면 정렬 불가
nums = [1, "2", 3]
nums.sort() # TypeError
10. sort(reverse=True)
리스트.sort(reverse=True)
리스트 내림차순 정렬
# 성공: 내림차순 정렬
nums = [3, 1, 2]
nums.sort(reverse=True)
print(nums) # [3, 2, 1]
# 성공: 문자열도 가능
fruits = ["banana", "apple", "orange"]
fruits.sort(reverse=True)
print(fruits) # ['orange', 'banana', 'apple']
# 주의: 원본 리스트가 직접 변경됨
nums = [3, 1, 2]
nums.sort(reverse=True)
print(nums) # [3, 2, 1]
11. sorted()
sorted(리스트)
정렬된 새 리스트 반환
# 성공: 새 리스트 반환
nums = [3, 1, 2]
result = sorted(nums)
print(result) # [1, 2, 3]
print(nums) # [3, 1, 2]
# 성공: 내림차순 가능
nums = [3, 1, 2]
print(sorted(nums, reverse=True)) # [3, 2, 1]
# 주의: 원본 리스트는 변경되지 않음
nums = [3, 1, 2]
sorted(nums)
print(nums) # [3, 1, 2]
12. reverse()
리스트.reverse()
리스트 순서 뒤집기
# 성공: 리스트 순서 반전
nums = [1, 2, 3]
nums.reverse()
print(nums) # [3, 2, 1]
# 성공: 문자열 리스트도 가능
fruits = ["apple", "banana", "orange"]
fruits.reverse()
print(fruits) # ['orange', 'banana', 'apple']
# 주의: 정렬이 아니라 순서만 뒤집음
nums = [3, 1, 2]
nums.reverse()
print(nums) # [2, 1, 3]
# 주의: 원본 리스트가 변경됨
nums = [1, 2, 3]
result = nums.reverse()
print(result) # None
13. copy()
리스트.copy()
리스트 복사
# 성공: 리스트 복사
nums = [1, 2, 3]
copied = nums.copy()
print(copied) # [1, 2, 3]
# 성공: 서로 다른 객체
nums = [1, 2, 3]
copied = nums.copy()
copied.append(4)
print(nums) # [1, 2, 3]
print(copied) # [1, 2, 3, 4]
# 주의: 얕은 복사(shallow copy)
data = [[1, 2], [3, 4]]
copied = data.copy()
copied[0][0] = 999
print(data) # [[999, 2], [3, 4]]
14. 리스트 길이
len(리스트)
리스트 요소 개수 구하기
# 성공: 리스트 길이 반환
nums = [1, 2, 3]
result = len(nums)
print(result) # 3
# 성공: 빈 리스트 길이
nums = []
print(len(nums)) # 0
# 주의: 리스트 메서드가 아니라 내장 함수
nums = [1, 2, 3]
nums.len() # AttributeError
15. 리스트 합치기
리스트 + 리스트
리스트 연결하기
# 성공: 리스트 합치기
a = [1, 2]
b = [3, 4]
result = a + b
print(result) # [1, 2, 3, 4]
# 성공: 문자열 리스트도 가능
a = ["a"]
b = ["b"]
print(a + b) # ['a', 'b']
# 주의: 리스트와 숫자는 더할 수 없음
nums = [1, 2]
print(nums + 3) # TypeError
16. 리스트 반복
리스트 * 숫자
리스트를 여러 번 반복
# 성공: 리스트 3번 반복
nums = [1, 2]
result = nums * 3
print(result) # [1, 2, 1, 2, 1, 2]
# 성공: 문자열 리스트도 반복 가능
data = ["a"]
print(data * 4) # ['a', 'a', 'a', 'a']
# 주의: 리스트끼리는 곱할 수 없음
nums = [1, 2]
print(nums * [3]) # TypeError
17. 리스트 인덱싱
리스트[위치]
리스트에서 특정 위치의 값 가져오기
# 성공: 첫 번째 값 가져오기
nums = [10, 20, 30]
result = nums[0]
print(result) # 10
# 성공: 마지막 값 가져오기
nums = [10, 20, 30]
print(nums[-1]) # 30
# 주의: 없는 위치는 에러 발생
nums = [10, 20, 30]
print(nums[10]) # IndexError
18. 리스트 값 변경
리스트[위치] = 새값
특정 위치의 값 변경
# 성공: 특정 위치 값 변경
nums = [10, 20, 30]
nums[1] = 200
print(nums) # [10, 200, 30]
# 성공: 문자열도 변경 가능
fruits = ["apple", "banana"]
fruits[0] = "orange"
print(fruits) # ['orange', 'banana']
# 주의: 문자열과 다르게 리스트는 원본 변경 가능
nums = [1, 2, 3]
nums[0] = 100
print(nums) # [100, 2, 3]
19. 리스트 슬라이싱
리스트[시작:끝]
리스트에서 원하는 범위만 가져오기
# 성공: 0번부터 2번 앞까지 가져오기
nums = [10, 20, 30, 40]
result = nums[0:2]
print(result) # [10, 20]
# 성공: 시작 또는 끝 생략 가능
nums = [10, 20, 30, 40]
print(nums[:3]) # [10, 20, 30]
print(nums[2:]) # [30, 40]
# 주의: 끝 위치는 포함되지 않음
nums = [10, 20, 30, 40]
print(nums[1:3]) # [20, 30]
# 주의: 슬라이싱은 새 리스트 반환
nums = [10, 20, 30]
result = nums[:]
print(result) # [10, 20, 30]
print(result is nums) # False
20. 리스트 슬라이싱 step
리스트[시작:끝:간격]
간격을 두고 리스트 자르기
# 성공: 2칸씩 건너뛰기
nums = [1, 2, 3, 4, 5, 6]
result = nums[::2]
print(result) # [1, 3, 5]
# 성공: 리스트 뒤집기
nums = [1, 2, 3]
print(nums[::-1]) # [3, 2, 1]
# 주의: 간격이 0이면 에러 발생
nums = [1, 2, 3]
print(nums[::0]) # ValueError
21. 슬라이싱으로 값 변경
리스트[시작:끝] = 새리스트
리스트 일부 구간을 새 값으로 변경
# 성공: 일부 구간 변경
nums = [1, 2, 3, 4]
nums[1:3] = [20, 30]
print(nums) # [1, 20, 30, 4]
# 성공: 길이가 달라도 변경 가능
nums = [1, 2, 3, 4]
nums[1:3] = [100, 200, 300]
print(nums) # [1, 100, 200, 300, 4]
# 주의: 문자열을 넣으면 한 글자씩 들어감
data = ["a", "b", "c"]
data[1:2] = "XY"
print(data) # ['a', 'X', 'Y', 'c']
22. del
del 리스트[위치]
del 리스트[시작:끝]
리스트 요소 삭제
# 성공: 특정 위치 삭제
nums = [1, 2, 3]
del nums[1]
print(nums) # [1, 3]
# 성공: 범위 삭제
nums = [1, 2, 3, 4]
del nums[1:3]
print(nums) # [1, 4]
# 주의: 없는 위치를 삭제하면 에러 발생
nums = [1, 2, 3]
del nums[10] # IndexError
23. in
값 in 리스트
리스트 안에 특정 값이 있는지 확인
# 성공: 값이 있으면 True
nums = [1, 2, 3]
print(2 in nums) # True
# 성공: 값이 없으면 False
print(10 in nums) # False
# 주의: 완전히 같은 값 기준
nums = [1, "2", 3]
print(2 in nums) # False
print("2" in nums) # True
24. not in
값 not in 리스트
리스트 안에 특정 값이 없는지 확인
# 성공: 값이 없으면 True
nums = [1, 2, 3]
print(10 not in nums) # True
# 성공: 값이 있으면 False
print(2 not in nums) # False
# 주의: 완전히 같은 값 기준
nums = [1, "2", 3]
print(2 not in nums) # True
print("2" not in nums) # False
25. for 반복문
for 변수 in 리스트:
실행문
리스트 요소를 하나씩 반복
# 성공: 리스트 값 하나씩 출력
nums = [1, 2, 3]
for num in nums:
print(num)
# 1
# 2
# 3
# 성공: 합계 구하기
nums = [1, 2, 3]
total = 0
for num in nums:
total += num
print(total) # 6
# 주의: 반복 중 리스트를 직접 삭제하면 예상과 다를 수 있음
nums = [1, 2, 3, 4]
for num in nums:
if num % 2 == 0:
nums.remove(num)
print(nums) # [1, 3]
26. enumerate()
enumerate(리스트)
리스트의 인덱스와 값을 함께 가져오기
# 성공: 인덱스와 값 함께 출력
fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
print(index, fruit)
# 0 apple
# 1 banana
# 2 orange
# 성공: 시작 번호 지정 가능
fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
# 1 apple
# 2 banana
# 3 orange
# 주의: enumerate 결과는 객체
fruits = ["apple", "banana"]
print(enumerate(fruits)) # <enumerate object at ...>
# 확인하려면 list로 변환
print(list(enumerate(fruits))) # [(0, 'apple'), (1, 'banana')]
27. range()와 인덱스 반복
for i in range(len(리스트)):
리스트[i]
리스트 인덱스를 기준으로 반복
# 성공: 인덱스로 리스트 값 접근
fruits = ["apple", "banana", "orange"]
for i in range(len(fruits)):
print(i, fruits[i])
# 0 apple
# 1 banana
# 2 orange
# 성공: 인덱스로 값 변경
nums = [1, 2, 3]
for i in range(len(nums)):
nums[i] = nums[i] * 10
print(nums) # [10, 20, 30]
# 주의: 단순 반복은 enumerate()가 더 보기 좋음
fruits = ["apple", "banana"]
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple
# 1 banana
28. 리스트 컴프리헨션
[표현식 for 변수 in 리스트]
리스트를 짧게 생성하거나 변환
# 성공: 각 값에 2 곱하기
nums = [1, 2, 3]
result = [num * 2 for num in nums]
print(result) # [2, 4, 6]
# 성공: 문자열 리스트 변환
fruits = ["apple", "banana"]
result = [fruit.upper() for fruit in fruits]
print(result) # ['APPLE', 'BANANA']
# 주의: 원본 리스트는 변경되지 않음
nums = [1, 2, 3]
[num * 2 for num in nums]
print(nums) # [1, 2, 3]
29. 조건 있는 리스트 컴프리헨션
[표현식 for 변수 in 리스트 if 조건]
조건에 맞는 값만 골라 새 리스트 생성
# 성공: 짝수만 추출
nums = [1, 2, 3, 4, 5]
result = [num for num in nums if num % 2 == 0]
print(result) # [2, 4]
# 성공: 길이가 5 이상인 문자열만 추출
fruits = ["apple", "kiwi", "banana"]
result = [fruit for fruit in fruits if len(fruit) >= 5]
print(result) # ['apple', 'banana']
# 주의: 조건에 맞는 값이 없으면 빈 리스트
nums = [1, 3, 5]
result = [num for num in nums if num % 2 == 0]
print(result) # []
30. if-else 리스트 컴프리헨션
[참값 if 조건 else 거짓값 for 변수 in 리스트]
조건에 따라 값을 바꿔 새 리스트 생성
# 성공: 짝수/홀수 표시
nums = [1, 2, 3, 4]
result = ["짝수" if num % 2 == 0 else "홀수" for num in nums]
print(result) # ['홀수', '짝수', '홀수', '짝수']
# 성공: 음수는 0으로 변경
nums = [10, -5, 3, -1]
result = [num if num > 0 else 0 for num in nums]
print(result) # [10, 0, 3, 0]
# 주의: if-else 위치가 일반 필터 조건과 다름
nums = [1, 2, 3]
result = [num if num > 1 else 0 for num in nums]
print(result) # [0, 2, 3]
31. 중첩 리스트
리스트 = [[값1, 값2], [값3, 값4]]
리스트 안에 리스트 넣기
# 성공: 중첩 리스트 생성
matrix = [[1, 2], [3, 4]]
print(matrix) # [[1, 2], [3, 4]]
# 성공: 내부 값 접근
matrix = [[1, 2], [3, 4]]
print(matrix[0][1]) # 2
print(matrix[1][0]) # 3
# 주의: 인덱스를 두 번 사용해야 내부 값 접근 가능
matrix = [[1, 2], [3, 4]]
print(matrix[0]) # [1, 2]
print(matrix[0][0]) # 1
32. 중첩 리스트 반복
for row in 리스트:
for value in row:
실행문
중첩 리스트의 값을 하나씩 처리
# 성공: 모든 값 출력
matrix = [[1, 2], [3, 4]]
for row in matrix:
for value in row:
print(value)
# 1
# 2
# 3
# 4
# 성공: 전체 합계 구하기
matrix = [[1, 2], [3, 4]]
total = 0
for row in matrix:
for value in row:
total += value
print(total) # 10
# 주의: 바깥 반복은 내부 리스트를 가져옴
matrix = [[1, 2], [3, 4]]
for row in matrix:
print(row)
# [1, 2]
# [3, 4]
33. sum()
sum(리스트)
리스트 숫자 합계 구하기
# 성공: 숫자 리스트 합계
nums = [1, 2, 3]
result = sum(nums)
print(result) # 6
# 성공: 빈 리스트 합계는 0
nums = []
print(sum(nums)) # 0
# 주의: 문자열 리스트에는 사용할 수 없음
data = ["a", "b"]
print(sum(data)) # TypeError
34. max()
max(리스트)
리스트에서 가장 큰 값 구하기
# 성공: 가장 큰 숫자 반환
nums = [10, 30, 20]
result = max(nums)
print(result) # 30
# 성공: 문자열은 유니코드/사전 순서 기준
fruits = ["apple", "banana", "orange"]
print(max(fruits)) # orange
# 주의: 빈 리스트는 에러 발생
nums = []
print(max(nums)) # ValueError
35. min()
min(리스트)
리스트에서 가장 작은 값 구하기
# 성공: 가장 작은 숫자 반환
nums = [10, 30, 20]
result = min(nums)
print(result) # 10
# 성공: 문자열은 유니코드/사전 순서 기준
fruits = ["apple", "banana", "orange"]
print(min(fruits)) # apple
# 주의: 빈 리스트는 에러 발생
nums = []
print(min(nums)) # ValueError
36. list()
list(반복가능한값)
반복 가능한 값을 리스트로 변환
# 성공: 문자열을 리스트로 변환
text = "abc"
result = list(text)
print(result) # ['a', 'b', 'c']
# 성공: range를 리스트로 변환
nums = list(range(1, 4))
print(nums) # [1, 2, 3]
# 주의: 숫자 하나는 리스트로 바로 변환할 수 없음
num = 123
print(list(num)) # TypeError
37. range()
range(시작, 끝, 간격)
연속된 숫자 범위 만들기
# 성공: 0부터 4까지 생성
result = list(range(5))
print(result) # [0, 1, 2, 3, 4]
# 성공: 시작과 끝 지정
result = list(range(1, 6))
print(result) # [1, 2, 3, 4, 5]
# 성공: 간격 지정
result = list(range(1, 10, 2))
print(result) # [1, 3, 5, 7, 9]
# 주의: 끝 값은 포함되지 않음
result = list(range(1, 5))
print(result) # [1, 2, 3, 4]
# 주의: 간격이 0이면 에러 발생
print(list(range(1, 5, 0))) # ValueError
38. reversed()
reversed(리스트)
리스트를 거꾸로 읽는 반복 객체 반환
# 성공: 리스트를 거꾸로 변환
nums = [1, 2, 3]
result = list(reversed(nums))
print(result) # [3, 2, 1]
# 성공: 원본은 변경되지 않음
nums = [1, 2, 3]
list(reversed(nums))
print(nums) # [1, 2, 3]
# 주의: reversed() 결과는 바로 출력하면 객체로 보임
nums = [1, 2, 3]
print(reversed(nums)) # <list_reverseiterator object at ...>
# 확인하려면 list로 변환
print(list(reversed(nums))) # [3, 2, 1]
39. zip()
zip(리스트1, 리스트2)
여러 리스트를 같은 위치끼리 묶기
# 성공: 두 리스트 묶기
names = ["Kim", "Lee", "Park"]
scores = [90, 80, 70]
result = list(zip(names, scores))
print(result) # [('Kim', 90), ('Lee', 80), ('Park', 70)]
# 성공: 반복문에서 함께 사용
names = ["Kim", "Lee"]
scores = [90, 80]
for name, score in zip(names, scores):
print(name, score)
# Kim 90
# Lee 80
# 주의: 길이가 다르면 짧은 쪽 기준
names = ["Kim", "Lee", "Park"]
scores = [90, 80]
print(list(zip(names, scores))) # [('Kim', 90), ('Lee', 80)]
40. any()
any(리스트)
리스트 안에 True로 판단되는 값이 하나라도 있는지 확인
# 성공: 하나라도 True면 True
data = [False, False, True]
result = any(data)
print(result) # True
# 성공: 모두 False면 False
data = [0, "", None]
print(any(data)) # False
# 주의: 빈 리스트는 False
data = []
print(any(data)) # False
41. all()
all(리스트)
리스트 안의 모든 값이 True로 판단되는지 확인
# 성공: 모두 True면 True
data = [True, 1, "hello"]
result = all(data)
print(result) # True
# 성공: 하나라도 False면 False
data = [True, 0, "hello"]
print(all(data)) # False
# 주의: 빈 리스트는 True
data = []
print(all(data)) # True
42. map()
map(함수, 리스트)
리스트의 각 값에 함수를 적용
# 성공: 문자열 숫자를 정수로 변환
data = ["1", "2", "3"]
result = list(map(int, data))
print(result) # [1, 2, 3]
# 성공: 각 숫자를 문자열로 변환
nums = [1, 2, 3]
result = list(map(str, nums))
print(result) # ['1', '2', '3']
# 주의: map() 결과는 바로 출력하면 객체로 보임
data = ["1", "2", "3"]
print(map(int, data)) # <map object at ...>
# 확인하려면 list로 변환
print(list(map(int, data))) # [1, 2, 3]
43. filter()
filter(함수, 리스트)
조건에 맞는 값만 걸러내기
# 성공: 짝수만 필터링
nums = [1, 2, 3, 4]
result = list(filter(lambda x: x % 2 == 0, nums))
print(result) # [2, 4]
# 성공: True로 판단되는 값만 남김
data = [0, 1, "", "hello", None]
result = list(filter(None, data))
print(result) # [1, 'hello']
# 주의: filter() 결과는 바로 출력하면 객체로 보임
nums = [1, 2, 3]
print(filter(lambda x: x > 1, nums)) # <filter object at ...>
44. 리스트 언패킹
변수1, 변수2 = 리스트
리스트 값을 변수에 나누어 담기
# 성공: 리스트 값을 변수에 각각 저장
data = ["Kim", 20]
name, age = data
print(name) # Kim
print(age) # 20
# 성공: 나머지 값 모으기
nums = [1, 2, 3, 4]
first, *rest = nums
print(first) # 1
print(rest) # [2, 3, 4]
# 주의: 변수 개수와 값 개수가 맞지 않으면 에러
data = [1, 2, 3]
a, b = data # ValueError
45. 리스트 비교
리스트1 == 리스트2
리스트1 < 리스트2
리스트 값을 순서대로 비교
# 성공: 값과 순서가 같으면 True
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
# 성공: 앞 요소부터 차례대로 크기 비교
a = [1, 2]
b = [1, 3]
print(a < b) # True
# 주의: 순서가 다르면 다른 리스트
a = [1, 2, 3]
b = [3, 2, 1]
print(a == b) # False
46. 리스트 중복 제거
list(set(리스트))
리스트에서 중복 값 제거
# 성공: 중복 제거
nums = [1, 2, 2, 3, 3]
result = list(set(nums))
print(result) # [1, 2, 3]
# 성공: 문자열 리스트도 가능
fruits = ["apple", "apple", "banana"]
print(list(set(fruits))) # ['apple', 'banana']
# 주의: 순서가 보장되지 않을 수 있음
nums = [3, 1, 2, 1]
print(list(set(nums))) # 순서가 바뀔 수 있음
47. 순서 유지 중복 제거
list(dict.fromkeys(리스트))
순서를 유지하면서 중복 제거
# 성공: 순서 유지 중복 제거
nums = [3, 1, 2, 1, 3]
result = list(dict.fromkeys(nums))
print(result) # [3, 1, 2]
# 성공: 문자열 리스트도 가능
fruits = ["banana", "apple", "banana"]
print(list(dict.fromkeys(fruits))) # ['banana', 'apple']
# 주의: 리스트 안에 리스트가 있으면 사용할 수 없음
data = [[1, 2], [1, 2]]
print(list(dict.fromkeys(data))) # TypeError
48. 리스트 안 리스트 평탄화
[값 for 내부리스트 in 리스트 for 값 in 내부리스트]
중첩 리스트를 한 줄 리스트로 만들기
# 성공: 2차원 리스트 평탄화
data = [[1, 2], [3, 4]]
result = [num for row in data for num in row]
print(result) # [1, 2, 3, 4]
# 성공: 문자열 리스트도 가능
data = [["a", "b"], ["c", "d"]]
print([ch for row in data for ch in row]) # ['a', 'b', 'c', 'd']
# 주의: 2차원 리스트 기준 예시
data = [[[1], [2]], [[3]]]
result = [num for row in data for num in row]
print(result) # [[1], [2], [3]]
49. 리스트 복사 - 슬라이싱
새리스트 = 리스트[:]
리스트를 새 리스트로 복사
# 성공: 리스트 복사
nums = [1, 2, 3]
copied = nums[:]
print(copied) # [1, 2, 3]
# 성공: 서로 다른 리스트
copied.append(4)
print(nums) # [1, 2, 3]
print(copied) # [1, 2, 3, 4]
# 주의: 얕은 복사
data = [[1, 2], [3, 4]]
copied = data[:]
copied[0][0] = 999
print(data) # [[999, 2], [3, 4]]
50. 깊은 복사
import copy
새리스트 = copy.deepcopy(리스트)
중첩 리스트까지 완전히 복사
# 성공: 중첩 리스트 깊은 복사
import copy
data = [[1, 2], [3, 4]]
copied = copy.deepcopy(data)
copied[0][0] = 999
print(data) # [[1, 2], [3, 4]]
print(copied) # [[999, 2], [3, 4]]
# 주의: 일반 copy()는 얕은 복사
data = [[1, 2], [3, 4]]
copied = data.copy()
copied[0][0] = 999
print(data) # [[999, 2], [3, 4]]
51. 리스트 조건 검사 - any()
any(조건식 for 변수 in 리스트)
조건을 만족하는 값이 하나라도 있는지 확인
# 성공: 짝수가 하나라도 있는지 확인
nums = [1, 3, 5, 6]
result = any(num % 2 == 0 for num in nums)
print(result) # True
# 성공: 특정 문자열 포함 여부 확인
fruits = ["apple", "banana", "orange"]
print(any("a" in fruit for fruit in fruits)) # True
# 주의: 조건을 만족하는 값이 없으면 False
nums = [1, 3, 5]
print(any(num % 2 == 0 for num in nums)) # False
52. 리스트 조건 검사 - all()
all(조건식 for 변수 in 리스트)
모든 값이 조건을 만족하는지 확인
# 성공: 모두 양수인지 확인
nums = [1, 2, 3]
result = all(num > 0 for num in nums)
print(result) # True
# 성공: 모두 문자열인지 확인
data = ["a", "b", "c"]
print(all(type(item) == str for item in data)) # True
# 주의: 하나라도 조건을 만족하지 않으면 False
nums = [1, -2, 3]
print(all(num > 0 for num in nums)) # False
53. 리스트 정렬 key
리스트.sort(key=기준함수)
sorted(리스트, key=기준함수)
특정 기준으로 리스트 정렬
# 성공: 문자열 길이 기준 정렬
fruits = ["banana", "kiwi", "apple"]
fruits.sort(key=len)
print(fruits) # ['kiwi', 'apple', 'banana']
# 성공: sorted()도 key 사용 가능
fruits = ["banana", "kiwi", "apple"]
result = sorted(fruits, key=len)
print(result) # ['kiwi', 'apple', 'banana']
# 주의: sort()는 원본 변경, sorted()는 새 리스트 반환
fruits = ["banana", "kiwi", "apple"]
result = sorted(fruits, key=len)
print(fruits) # ['banana', 'kiwi', 'apple']
print(result) # ['kiwi', 'apple', 'banana']
54. 딕셔너리 리스트 정렬
sorted(리스트, key=lambda x: x["키"])
딕셔너리가 들어있는 리스트를 특정 키 기준으로 정렬
# 성공: 나이 기준 정렬
users = [
{"name": "Kim", "age": 30},
{"name": "Lee", "age": 20},
{"name": "Park", "age": 25},
]
result = sorted(users, key=lambda user: user["age"])
print(result)
# [{'name': 'Lee', 'age': 20}, {'name': 'Park', 'age': 25}, {'name': 'Kim', 'age': 30}]
# 성공: 이름 기준 정렬
result = sorted(users, key=lambda user: user["name"])
print(result)
# [{'name': 'Kim', 'age': 30}, {'name': 'Lee', 'age': 20}, {'name': 'Park', 'age': 25}]
# 주의: 없는 키를 기준으로 정렬하면 에러 발생
users = [{"name": "Kim"}]
sorted(users, key=lambda user: user["age"]) # KeyError
55. 리스트에서 인덱스와 값 동시에 변경
for index, value in enumerate(리스트):
리스트[index] = 새값
리스트 값을 반복하면서 직접 변경
# 성공: 모든 값을 10배로 변경
nums = [1, 2, 3]
for index, value in enumerate(nums):
nums[index] = value * 10
print(nums) # [10, 20, 30]
# 성공: 문자열 리스트 변경
fruits = ["apple", "banana"]
for index, fruit in enumerate(fruits):
fruits[index] = fruit.upper()
print(fruits) # ['APPLE', 'BANANA']
# 주의: value만 바꾸면 원본은 안 바뀜
nums = [1, 2, 3]
for value in nums:
value = value * 10
print(nums) # [1, 2, 3]
56. 리스트에서 특정 값 모두 제거
[값 for 값 in 리스트 if 값 != 제거할값]
리스트에서 특정 값을 모두 제거한 새 리스트 생성
# 성공: 특정 값 모두 제거
nums = [1, 2, 3, 2, 4]
result = [num for num in nums if num != 2]
print(result) # [1, 3, 4]
# 성공: 문자열 리스트에서도 사용 가능
fruits = ["apple", "banana", "apple"]
result = [fruit for fruit in fruits if fruit != "apple"]
print(result) # ['banana']
# 주의: 원본 리스트는 변경되지 않음
nums = [1, 2, 3, 2]
[num for num in nums if num != 2]
print(nums) # [1, 2, 3, 2]
57. 리스트에서 None 제거
[값 for 값 in 리스트 if 값 is not None]
리스트에서 None 값 제거
# 성공: None만 제거
data = [1, None, 2, None, 3]
result = [item for item in data if item is not None]
print(result) # [1, 2, 3]
# 성공: 0, 빈 문자열은 유지됨
data = [0, "", None, "hello"]
result = [item for item in data if item is not None]
print(result) # [0, '', 'hello']
# 주의: filter(None, 리스트)는 False 값도 제거함
data = [0, "", None, "hello"]
print(list(filter(None, data))) # ['hello']
58. 리스트에서 빈 문자열 제거
[값 for 값 in 리스트 if 값 != ""]
리스트에서 빈 문자열 제거
# 성공: 빈 문자열 제거
data = ["apple", "", "banana", ""]
result = [item for item in data if item != ""]
print(result) # ['apple', 'banana']
# 성공: 공백 문자열은 유지됨
data = ["apple", " ", "banana", ""]
result = [item for item in data if item != ""]
print(result) # ['apple', ' ', 'banana']
# 주의: 공백까지 제거하려면 strip() 사용
data = ["apple", " ", "banana", ""]
result = [item for item in data if item.strip() != ""]
print(result) # ['apple', 'banana']
59. 리스트에서 조건에 맞는 첫 값 찾기
next((값 for 값 in 리스트 if 조건), 기본값)
조건에 맞는 첫 번째 값 찾기
# 성공: 첫 번째 짝수 찾기
nums = [1, 3, 4, 6]
result = next((num for num in nums if num % 2 == 0), None)
print(result) # 4
# 성공: 조건에 맞는 값이 없으면 기본값 반환
nums = [1, 3, 5]
result = next((num for num in nums if num % 2 == 0), None)
print(result) # None
# 주의: 기본값을 생략하면 조건 불일치 시 에러 발생
nums = [1, 3, 5]
result = next(num for num in nums if num % 2 == 0) # StopIteration
60. 리스트에서 조건에 맞는 인덱스 찾기
next((index for index, 값 in enumerate(리스트) if 조건), 기본값)
조건에 맞는 첫 번째 값의 인덱스 찾기
# 성공: 첫 번째 짝수의 인덱스 찾기
nums = [1, 3, 4, 6]
result = next((index for index, num in enumerate(nums) if num % 2 == 0), None)
print(result) # 2
# 성공: 특정 문자열의 인덱스 찾기
fruits = ["apple", "banana", "orange"]
result = next((index for index, fruit in enumerate(fruits) if fruit == "banana"), None)
print(result) # 1
# 주의: 조건에 맞는 값이 없으면 기본값 반환
nums = [1, 3, 5]
result = next((index for index, num in enumerate(nums) if num % 2 == 0), None)
print(result) # None
61. 리스트를 문자열로 변환
구분자.join(리스트)
문자열 리스트를 하나의 문자열로 변환
# 성공: 쉼표로 연결
data = ["apple", "banana", "orange"]
result = ", ".join(data)
print(result) # apple, banana, orange
# 성공: 줄바꿈으로 연결
data = ["line1", "line2", "line3"]
result = "\\\\n".join(data)
print(result)
# line1
# line2
# line3
# 주의: 리스트 안 값은 모두 문자열이어야 함
data = ["apple", 100, "orange"]
", ".join(data) # TypeError
62. 리스트 숫자를 문자열로 변환 후 join
구분자.join(map(str, 리스트))
숫자 리스트를 문자열로 변환해서 합치기
# 성공: 숫자 리스트를 쉼표 문자열로 변환
nums = [1, 2, 3]
result = ", ".join(map(str, nums))
print(result) # 1, 2, 3
# 성공: 하이픈으로 연결
nums = [2026, 5, 28]
result = "-".join(map(str, nums))
print(result) # 2026-5-28
# 주의: map(str, 리스트)를 하지 않으면 에러
nums = [1, 2, 3]
", ".join(nums) # TypeError
63. 리스트 요소 타입 확인
[type(값) for 값 in 리스트]
리스트 안 요소들의 타입 확인
# 성공: 각 요소 타입 확인
data = [1, "a", True, None]
result = [type(item) for item in data]
print(result) # [<class 'int'>, <class 'str'>, <class 'bool'>, <class 'NoneType'>]
# 성공: 타입 이름만 보기
result = [type(item).__name__ for item in data]
print(result) # ['int', 'str', 'bool', 'NoneType']
# 주의: bool은 int의 하위 타입처럼 동작할 수 있음
data = [True, 1]
print(True == 1) # True
64. 리스트에서 특정 타입만 추출
[값 for 값 in 리스트 if isinstance(값, 타입)]
리스트에서 원하는 타입의 값만 추출
# 성공: 문자열만 추출
data = [1, "apple", 2, "banana", True]
result = [item for item in data if isinstance(item, str)]
print(result) # ['apple', 'banana']
# 성공: 숫자만 추출
data = [1, "apple", 2.5, "banana"]
result = [item for item in data if isinstance(item, (int, float))]
print(result) # [1, 2.5]
# 주의: bool은 int로 판단됨
data = [1, True, 2]
result = [item for item in data if isinstance(item, int)]
print(result) # [1, True, 2]
65. 리스트에서 중첩 리스트 여부 확인
any(isinstance(값, list) for 값 in 리스트)
리스트 안에 리스트가 포함되어 있는지 확인
# 성공: 중첩 리스트가 있으면 True
data = [1, 2, [3, 4]]
result = any(isinstance(item, list) for item in data)
print(result) # True
# 성공: 중첩 리스트가 없으면 False
data = [1, 2, 3]
result = any(isinstance(item, list) for item in data)
print(result) # False
# 주의: 튜플은 리스트가 아님
data = [1, (2, 3)]
result = any(isinstance(item, list) for item in data)
print(result) # False
66. 리스트에서 빈 리스트 제거
[값 for 값 in 리스트 if 값 != []]
리스트 안의 빈 리스트 제거
# 성공: 빈 리스트 제거
data = [[1, 2], [], [3, 4], []]
result = [item for item in data if item != []]
print(result) # [[1, 2], [3, 4]]
# 성공: 일반 값과 섞여 있어도 제거 가능
data = [1, [], 2, []]
result = [item for item in data if item != []]
print(result) # [1, 2]
# 주의: 빈 문자열, 0, None은 제거되지 않음
data = [[], "", 0, None]
result = [item for item in data if item != []]
print(result) # ['', 0, None]
67. 리스트에서 빈 값 제거
list(filter(None, 리스트))
False로 판단되는 값을 모두 제거
# 성공: 빈 값 제거
data = [0, 1, "", "hello", None, [], [1]]
result = list(filter(None, data))
print(result) # [1, 'hello', [1]]
# 성공: 빈 문자열 제거에도 사용 가능
data = ["apple", "", "banana"]
print(list(filter(None, data))) # ['apple', 'banana']
# 주의: 0도 같이 제거됨
data = [0, 1, 2, None]
print(list(filter(None, data))) # [1, 2]
68. 리스트 요소 문자열 공백 제거
[값.strip() for 값 in 리스트]
문자열 리스트의 각 요소 앞뒤 공백 제거
# 성공: 각 문자열 공백 제거
data = [" apple ", " banana ", " orange "]
result = [item.strip() for item in data]
print(result) # ['apple', 'banana', 'orange']
# 성공: 줄바꿈 제거에도 사용 가능
data = ["hello\\\\n", "\\\\npython"]
result = [item.strip() for item in data]
print(result) # ['hello', 'python']
# 주의: 문자열이 아닌 값이 있으면 에러
data = [" apple ", 100, " banana "]
result = [item.strip() for item in data] # AttributeError
69. 문자열 요소만 공백 제거
[값.strip() if isinstance(값, str) else 값 for 값 in 리스트]
문자열인 요소만 공백 제거
# 성공: 문자열만 strip 적용
data = [" apple ", 100, " banana "]
result = [item.strip() if isinstance(item, str) else item for item in data]
print(result) # ['apple', 100, 'banana']
# 성공: None이 있어도 에러 없음
data = [" hello ", None, " python "]
result = [item.strip() if isinstance(item, str) else item for item in data]
print(result) # ['hello', None, 'python']
# 주의: 숫자나 None은 그대로 유지됨
data = [" 1 ", 2, None]
result = [item.strip() if isinstance(item, str) else item for item in data]
print(result) # ['1', 2, None]
70. 리스트 요소 문자열 치환
[값.replace(기존값, 변경값) for 값 in 리스트]
문자열 리스트의 각 요소에서 문자열 치환
# 성공: 각 요소 문자열 치환
data = ["apple pie", "apple juice"]
result = [item.replace("apple", "orange") for item in data]
print(result) # ['orange pie', 'orange juice']
# 성공: 특정 문자 제거
data = ["a-b", "c-d"]
result = [item.replace("-", "") for item in data]
print(result) # ['ab', 'cd']
# 주의: 문자열이 아닌 값이 있으면 에러
data = ["apple", 100]
result = [item.replace("apple", "orange") for item in data] # AttributeError
71. 리스트 요소 문자열 대소문자 변환
[값.upper() for 값 in 리스트]
[값.lower() for 값 in 리스트]
문자열 리스트의 각 요소 대소문자 변환
# 성공: 모두 대문자로 변환
data = ["apple", "banana"]
result = [item.upper() for item in data]
print(result) # ['APPLE', 'BANANA']
# 성공: 모두 소문자로 변환
data = ["APPLE", "BANANA"]
result = [item.lower() for item in data]
print(result) # ['apple', 'banana']
# 주의: 문자열이 아닌 값이 있으면 에러
data = ["apple", 100]
result = [item.upper() for item in data] # AttributeError
72. 리스트 요소 문자열 분리
[값.split(기준값) for 값 in 리스트]
문자열 리스트의 각 요소를 분리
# 성공: 각 문자열을 쉼표 기준으로 분리
data = ["a,b", "c,d"]
result = [item.split(",") for item in data
print(result) # [['a', 'b'], ['c', 'd']]
# 성공: 공백 기준 분리
data = ["hello python", "java c"]
result = [item.split() for item in data]
print(result) # [['hello', 'python'], ['java', 'c']]
# 주의: 결과는 중첩 리스트가 됨
data = ["a,b", "c,d"]
result = [item.split(",") for item in data]
print(result) # [['a', 'b'], ['c', 'd']]
73. 리스트 요소 문자열 포함 여부 필터
[값 for 값 in 리스트 if 찾을값 in 값]
특정 문자열을 포함한 요소만 추출
# 성공: apple 포함 요소만 추출
data = ["apple pie", "banana", "apple juice"]
result = [item for item in data if "apple" in item]
print(result) # ['apple pie', 'apple juice']
# 성공: 확장자 기준 필터
files = ["a.txt", "b.py", "c.txt"]
result = [file for file in files if ".txt" in file]
print(result) # ['a.txt', 'c.txt']
# 주의: 대소문자 구분
data = ["Apple", "banana"]
result = [item for item in data if "apple" in item]
print(result) # []
74. 리스트 요소 startswith 필터
[값 for 값 in 리스트 if 값.startswith(시작값)]
특정 문자열로 시작하는 요소만 추출
# 성공: 특정 접두사 추출
data = ["user_kim", "admin_lee", "user_park"]
result = [item for item in data if item.startswith("user_")]
print(result) # ['user_kim', 'user_park']
# 성공: 파일명 기준 필터
files = ["report_1.pdf", "image.png", "report_2.pdf"]
result = [file for file in files if file.startswith("report_")]
print(result) # ['report_1.pdf', 'report_2.pdf']
# 주의: 대소문자 구분
data = ["User_kim", "user_lee"]
result = [item for item in data if item.startswith("user_")]
print(result) # ['user_lee']
75. 리스트 요소 endswith 필터
[값 for 값 in 리스트 if 값.endswith(끝값)]
특정 문자열로 끝나는 요소만 추출
# 성공: 확장자 기준 필터
files = ["a.txt", "b.py", "c.txt"]
result = [file for file in files if file.endswith(".txt")]
print(result) # ['a.txt', 'c.txt']
# 성공: 백업 파일만 추출
files = ["data.sql", "data.sql.bak", "test.bak"]
result = [file for file in files if file.endswith(".bak")]
print(result) # ['data.sql.bak', 'test.bak']
# 주의: 정확히 끝나는 값만 True
files = ["image.png", "image.png.backup"]
result = [file for file in files if file.endswith(".png")]
print(result) # ['image.png']
'🐍Python' 카테고리의 다른 글
| Python Basic: set (0) | 2026.05.28 |
|---|---|
| Python Basic: dict (0) | 2026.05.28 |
| Python Basic: tuple (0) | 2026.05.28 |
| Python Basic: String (0) | 2026.05.28 |
