코테를 풀다가 궁금한게 있어 좀 적어본다.
arr = list(map(int,input().split())) # 8,-5,10
# 여기서 arr 를 출력해보면 -> [8,-5,10]
print(min(arr)) # -5
A : list 안에서 가장 작은 값을 반환하기 때문이다.
a,b,c = map(int,input().split()) # 8,-5,10
print(a,b,c)
A :
우선 이터러블(iterable)은 자료를 반복할 수 있는 객체
를 말하는 것이다.
우리가 흔히 쓰는 배열 역시 이러러블 객체이다.
이때 반환되는 객체는 map 객체이며, 이터레이터이다.
반면에 리터럴은 소스 코드에 직접 나타내는 값 그 자체를 의미한다. 예를들어, 10, 3.14, "hello", [1, 2, 3], (4, 5), { 'a': 1, 'b': 2 } 등은 모두 리터럴이다. 이들은 코드에 직접 값을 나타낸다.
밑에코드를 다시 살펴보자
a,b,c = map(int,input().split()) # 8,-5,10
print(a,b,c)
input().split()
: 입력받은 문자열을 공백으로 분리하여 문자열 리스트를 생성한다. 예를 들어 "8 -5 10"을 입력하면 ['8', '-5', '10']
이 생성된다. 이때 '8'
, '-5'
, '10'
은 문자열 리터럴이다.map(int, ...)
: map
함수는 문자열 리스트의 각 요소에 int
함수를 적용한다. int
함수는 문자열을 정수로 변환한다. map
의 결과는 map 객체 (이터레이터)이다.a, b, c = ...
: 이 할당 부분에서 map 객체는 값을 생성하여 a
, b
, c
에 각각 할당한다.이때 a,b,c에 할당되는 값은 8,-5,10 이다. 이 값들은 정수 값이다. 하지만 int() 함수를 통해 문자열에서 변환된 값이디 때문에 리터럴이라고 할 수 없다.
예시 코드를 보여주자면
numbers = ['1', '2', '3', '4', '5']
mapped_numbers = map(int, numbers)
# 첫 번째 순회
print("첫 번째 순회:")
for num in mapped_numbers:
print(num)
# 두 번째 순회
print("\n두 번째 순회:")
for num in mapped_numbers:
print(num)
# list()로 변환 후 순회
mapped_numbers = map(int, numbers) # map 객체를 다시 생성해야 함
list_numbers = list(mapped_numbers)
print("\nlist()로 변환 후 첫 번째 순회:")
for num in list_numbers:
print(num)
print("\nlist()로 변환 후 두 번째 순회:")
for num in list_numbers:
print(num)
실행 결과
첫 번째 순회:
1
2
3
4
5
두 번째 순회:
list()로 변환 후 첫 번째 순회:
1
2
3
4
5
list()로 변환 후 두 번째 순회:
1
2
3
4
5
이터레이터는 한 번 순회하면 모든 값을 소진한다. 따라서 다시 사용하려면 이터레이터를 다시생성해야 한다. list()
, tuple()
, set()
등을 사용하여 이터레이터의 모든 값을 컨테이너 객체(리스트, 튜플, 집합)로 변환하면 여러 번 사용할 수 있다.