알고리즘 문제를 풀다가 map을 활용해서 리스트 원소 중에서 가장 길이가 긴 원소를 찾는 방법을 배웠다.
사실 map의 원리를 잘 이해하면 알 수 있는 내용이지만, 빠르게 찾는 방법을 알아두면 좋으니 배워보자.
먼저, 방법부터 말하자면 아래와 같이 활용할 수 있다.
n = max(map(len,list))
편의상 list를 nums 라는 리스트라고 가정해보자.
map(len, nums) 는 nums가 리스트라고 가정할 때, map 함수는 리스트 nums 의 각 요소에 대해 len 함수를 적용한다는 의미다.
즉, nums 에 있는 각 요소의 길이를 계산하여 반환하는 작업이라 할 수 있다.
예시를 살펴보자.
nums = [[1,2,3], [4,5], [6]]
위와 같은 nums 리스트가 있다고 한다면, map(len, nums) 는 각 리스트의 길이를 반환해서 [3,2,1] 이라는 리스트를 얻게 된다.
(※ 물론 map 객체를 list로 변환해야 직접 [3,2,1] 인 것을 확인할 수 있다.)
이 때, max() 함수는 주어진 값들 중에서 가장 큰 값을 반환하는 함수이므로, 여기서 map 으로 얻은 객체 요소들의 길이 중에서 가장 큰 값을 찾으면 3 이 된다.
nums = [[1,2,3],[4,5],[6]]
n = max(map(len, nums)) # 3
실제로, nums 리스트 중에 가장 길이가 긴 리스트는 [1,2,3] 으로 3의 길이를 갖는다.
한마디로, `max(map(len,nums))` 는 nums 라는 리스트 안에 있는 하위 리스트나 문자열 등 각 요소의 길이를 구하고, 그 중 가장 긴 요소의 길이를 반환하는 작업이다.
또 다른 예를 살펴보자.
nums = [123,45678,9]
위와 같이 숫자로 이루어진 nums 리스트가 있다고 한다면, 숫자를 문자열로 변환을 하고 길이를 측정할 수 있다.
nums = list(map(str,nums))
먼저 nums = list(map(str,nums)) 로 숫자들을 문자열로 변환을 해서 각 원소를 숫자가 아닌 스트링 형태로 바꿔준다.
이 작업을 하는 이유는 숫자에는 len() 함수를 적용시킬 수 없기 때문이다.
그런 후에, map(len,nums) 를 적용하면 원소가 숫자라도 각 원소의 길이를 반환할 수 있다.
이 때, max(map(len,nums)) 의 값은 45678 값이 제일 길이가 긴 숫자이므로 45678 의 길이인 5를 반환한다.
nums = [123,45678,9]
nums = list(map(str,nums))
n = max(map(len, nums)) # 5
이처럼, 리스트 내부의 원소가 리스트이든, 문자열이든, 숫자이든 해당 시퀀스의 원소를 "길이"를 기준으로 map화가 가능하고, 각 원소의 길이를 파악할 수 있다.
즉, `max(map(len,nums))` 는 리스트의 원소 중에 최대 길이를 반환하고, 'min(map(len,nums))` 는 최소 길이를 반환한다.
'컴퓨터 공부 > 🐍 Python' 카테고리의 다른 글
Python any(), all() 함수 (1) | 2024.11.19 |
---|---|
정규식을 사용해 여러개의 구분자로 split 하는 방법 (0) | 2024.09.21 |
What is "self" in Python? (2) | 2024.01.08 |
Remove Non-alphanumeric Characters in Python (0) | 2023.12.13 |
for문에 else문이 딸랑? (2) | 2023.12.02 |