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

파이썬 – 약수 개수를 기준으로 리스트 정렬하기

파이썬에서 리스트의 각 요소를 약수(인수)의 개수를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 리스트 컴프리헨션과 나머지 연산자(%), 그리고 len() 메서드를 활용하는 함수를 직접 정의한 뒤, sort() 메서드의 key 인자로 전달하면 간단하게 해결할 수 있습니다.

예제 코드

다음은 약수 개수를 기준으로 리스트를 정렬하는 전체 예제입니다.

def factor_count(element):
    return len([element for index in range(1, element) if element % index == 0])

my_list = [121, 1120, 13540, 221, 1400]

print("The list is :")
print(my_list)

my_list.sort(key=factor_count)

print("The result is :")
print(my_list)

실행 결과

The list is :
[121, 1120, 13540, 221, 1400]
The result is :
[121, 221, 13540, 1120, 1400]

코드 설명

  • factor_count 함수 정의: 리스트의 각 요소를 매개변수로 받아, 1부터 해당 값 미만까지 반복하면서 나누어 떨어지는 수(약수)를 리스트 컴프리헨션으로 모으고 len()으로 그 개수를 반환합니다.

  • 리스트 정의 및 출력: 함수 외부에서 정렬 대상 리스트를 정의하고, 정렬 전 상태를 콘솔에 출력합니다.

  • 정렬 수행: sort() 메서드에 key=factor_count를 지정하여, 요소 간 비교 기준을 약수 개수로 설정합니다.

  • 결과 확인: 약수 개수가 적은 순서부터 정렬된 최종 결과가 콘솔에 출력됩니다.

추가 팁

list.sort()는 원본 리스트 자체를 변경하는 제자리(in-place) 정렬 방식입니다. 원본 리스트를 그대로 유지하고 싶다면 내장 함수 sorted()를 사용하는 것이 좋습니다.

new_list = sorted(my_list, key=factor_count)

또한 위 코드의 range(1, element)는 자기 자신을 약수에서 제외하지만, 모든 수는 자기 자신을 약수로 가지므로 각 요소의 카운트가 똑같이 하나씩 줄어들 뿐 정렬 순서에는 영향을 주지 않습니다. 의도를 더 명확히 드러내고 싶다면 다음과 같이 표현식을 단순화할 수 있습니다.

def factor_count(element):
    return sum(1 for i in range(1, element + 1) if element % i == 0)