Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 리스트 요소를 특정 숫자의 등장 횟수 기준으로 정렬하는 방법


파이썬에서 리스트의 요소들을 특정 숫자가 등장하는 횟수를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 리스트의 각 요소를 매개변수로 받는 함수를 직접 정의하고, 문자열 변환을 담당하는 str()과 개수 세기를 담당하는 count() 메서드를 조합해 정렬 기준값을 계산하면 됩니다.

아래 예제를 통해 실제 동작 과정을 확인해 보겠습니다.

예제 코드

def sort_count_digits(elements):
    return str(elements).count(str(my_key))

my_list = [4522, 2452, 1233, 2465]

print("정렬 전 리스트 :")
print(my_list)

my_key = 2

print("기준이 되는 숫자(key) 값 :")
print(my_key)

my_list.sort(key=sort_count_digits)

print("정렬 결과 :")
print(my_list)

실행 결과

정렬 전 리스트 :
[4522, 2452, 1233, 2465]
기준이 되는 숫자(key) 값 :
2
정렬 결과 :
[1233, 2465, 4522, 2452]

코드 설명

  • sort_count_digits라는 이름의 함수를 정의하고, 리스트의 각 요소를 매개변수로 전달받습니다.

  • 함수 내부에서는 요소를 str()로 문자열로 변환한 뒤, count() 메서드를 사용해 기준 숫자(my_key)가 해당 요소 안에 몇 번 나타나는지 계산합니다.

  • 계산된 개수를 함수의 반환값으로 돌려줍니다.

  • 네 개의 숫자로 구성된 리스트를 정의하고 콘솔에 출력합니다.

  • 정렬 기준으로 사용할 key 값(여기서는 2)을 정의하고 출력합니다.

  • sort() 메서드를 호출할 때 key 인자에 앞서 정의한 함수를 지정하여, 각 요소의 '2' 등장 횟수를 기준으로 오름차순 정렬을 수행합니다.

  • 정렬이 완료된 리스트가 최종 결과로 콘솔에 출력됩니다.

동작 원리 살펴보기

이 예제에서 기준 숫자는 2입니다. 각 요소에 숫자 2가 몇 번 등장하는지 정리하면 다음과 같습니다.

  • 4522 → 숫자 2가 2회 등장

  • 2452 → 숫자 2가 2회 등장

  • 1233 → 숫자 2가 1회 등장

  • 2465 → 숫자 2가 1회 등장

sort()는 기본적으로 오름차순으로 정렬하기 때문에, 등장 횟수가 적은 요소부터 앞쪽에 배치됩니다. 그 결과 최종 출력은 [1233, 2465, 4522, 2452]가 됩니다.

람다(lambda) 표현식으로 더 간결하게 작성하기

별도의 함수를 정의하지 않고 람다 표현식을 활용하면 동일한 로직을 한 줄로 처리할 수 있습니다.

my_key = 2
my_list = [4522, 2452, 1233, 2465]

result = sorted(my_list, key=lambda x: str(x).count(str(my_key)))
print(result)  # [1233, 2465, 4522, 2452]

참고로 sorted() 함수는 원본 리스트를 변경하지 않고 정렬된 새 리스트를 반환하는 반면, list.sort() 메서드는 원본 리스트 자체를 제자리(in-place)에서 정렬한다는 차이가 있습니다. 상황에 맞게 적절한 방법을 선택해서 사용하시면 됩니다.