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
  • 전체
    오늘
    어제
    • 분류 전체보기 (88) N
      • 💭Retrospective (21)
      • 🥕FrontEnd (0)
      • 🐬MySQL (7) N
      • 🐍Python (5)
      • 🍃SpringBoot (33)
      • ☕Java (1)
      • ♾️Devops (1)
      • 🌎Network (2)
      • 📚Read & 👨‍🏫Course (10)
      • Programmers (1)
      • 🧪Test (7)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    책
    gradle
    Spring
    MySQL
    Python
    optimistic rock
    한빛아카데미
    Concurrency
    junit
    회고
    Mockito
    redis
    distributed lock
    DI
    spring boot
    나는리뷰어다
    IoC
    서평단
    jwt
    한빛미디어
  • 최근 댓글

  • 최근 글

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

티스토리툴바