# 0부터 9까지의 수를 포함하는 리스트
array = [i for i in range(10)]
print(array) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 0부터 9까지의 수 중 홀수만을 포함하는 리스트
array = [i for i in range(10) if i % 2 == 1]
print(array) # [1, 3, 5, 7, 9]
# n * m 크기의 2차원 리스트 초기화
n = 4
m = 3
array = [[0] * m for _ in range(n)]
print(array) # [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
# 잘못된 방법
array = [[0] * m] * n
array[1][1] = 5
print(array) # [[0, 5, 0], [0, 5, 0], [0, 5, 0], [0, 5, 0]]
[[0] * m] * n을 실행하면, [[0] * m]이라는 리스트가 먼저 생성됨.
이후, 이 리스트를 n번 반복하여 새로운 리스트를 만든 것처럼 보이지만, 실제로는 같은 리스트 객체를 n번 참조하는 형태가 됨.
따라서, array[1][1] = 5로 특정 위치를 변경하면, 모든 행의 동일한 위치가 함께 변경됨.
이를 해결하려면 리스트 컴프리헨션을 통해 내부 리스트를 개별적으로 생성해야 함.
remove() 메서드의 경우 리스트에서 처음 등장하는 특정 값 하나만 제거하기 때문에, 이 경우에도 리스트 컴프리헨션을 사용하여 간단히 해결할 수 있음.
a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
result = [i for i in a if i not in remove_set]
print(result) # [1, 2, 4]
리스트와 유사하지만 아래와 같은 특징을 가진다.
( ) 사용키(key)와 값(value)의 쌍으로 이루어진 자료구조
자주 사용하는 입출력 방식 - input()과 map() 함께 사용하기
# 여러 개의 정수 입력받기
nums = list(map(int, input("숫자들을 입력하세요: ").split()))
print(nums)
# 숫자들을 입력하세요: 10 20 30 40
# [10, 20, 30, 40]
# 만약 데이터의 개수가 정해져 있다면?
a, b, c = map(int, input("숫자들을 입력하세요: ").split())
print(a, b, c)
# 숫자들을 입력하세요: 10 20 30
# 10 20 30
import sys
data = sys.stdin.readline().rstrip()
print(data)
간단한 함수를 한 줄로 표현할 때 사용하는 익명 함수
print((lambda a, b: a + b)(3, 7))
✔ 간단한 연산을 할 때 (map(), filter(), sorted()와 함께!)
array = [('A', 50), ('B', 32), ('C', 74)]
print(sorted(array, key=lambda x: x[1], reverse=True))
# [('C', 74), ('A', 50),('B', 32)]
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
result = map(lambda a, b: a + b, list1, list2)
print(list(result)) # [7, 9, 11, 13, 15]
✔ 함수를 한 번만 사용할 경우 (익명 함수로 사용)
순열: 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것조합: 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것Counter: 원소의 등장 횟수를 세는 기능 제공