Python Basic: list

2026. 5. 28. 21:53·🐍Python

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
'🐍Python' 카테고리의 다른 글
  • Python Basic: set
  • Python Basic: dict
  • Python Basic: tuple
  • Python Basic: String
limdaeil
limdaeil
limdaeil 님의 블로그 입니다.
  • limdaeil
    limdaeil
    limdaeil
  • 전체
    오늘
    어제
    • 분류 전체보기 (50) N
      • 💭Retrospective (16)
      • 🐬MySQL (1)
      • 🐍Python (5)
      • 🍃SpringBoot (14) N
      • ♾️Devops (1)
      • 🌎Network (2)
      • 📚Read & 👨‍🏫Course (10)
      • 🥕Fortinet (0)
      • Programmers (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MySQL
    나는리뷰어다
    Python
    Concurrency
    서평단
    optimistic rock
    레이스 컨디션
    spring boot
    gradle
    jwt
    HttpMessageConverter
    mcp
    한빛미디어
    이것이 스프링 AI다
    회고
    redis
    한빛아카데미
    distributed lock
    클린 아키텍처 with 파이썬
    맛있는 디자인 피그마 With AI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
limdaeil
Python Basic: list
상단으로

티스토리툴바