Python 3에서 사용자 지정 비교 함수를 사용하는 방법은 무엇입니까?
Python 2.x 에서는 사용자 지정 함수를 sorted 및 .sort 함수에 전달할 수 있습니다.
>>> x=['kar','htar','har','ar']
>>>
>>> sorted(x)
['ar', 'har', 'htar', 'kar']
>>>
>>> sorted(x,cmp=customsort)
['kar', 'htar', 'har', 'ar']
에 있기 때문에 내 언어, consonents은이 순서와 함께 제공
"k","kh",....,"ht",..."h",...,"a"
하지만 Python 3.x 에서는 cmp
키워드를 전달할 수없는 것 같습니다.
>>> sorted(x,cmp=customsort)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'cmp' is an invalid keyword argument for this function
대안이 있습니까 아니면 나만의 정렬 함수를 작성해야합니까?
참고 : "k", "kh"등을 사용하여 단순화했습니다. 실제 문자는 유니 코드이고 훨씬 더 복잡합니다. 때로는 자음 전후에 모음이 나오는 경우가 있습니다. 사용자 지정 비교 기능을 수행 했으므로 해당 부분은 괜찮습니다. 문제는 사용자 지정 비교 함수를 sorted 또는 .sort에 전달할 수 없다는 것입니다.
key
인수를 사용하고 이전 함수를 함수 로 변환하는 방법에 대한 레시피 를 따르십시오 .cmp
key
functools
docs.python.org/3.6/library/functools.html#functools.cmp_to_key에cmp_to_key
언급 된 함수가 있습니다.
key
키워드와 functools.cmp_to_key 를 사용 하여 비교 함수를 변환하십시오.
sorted(x, key=functools.cmp_to_key(customsort))
customsort () 대신 각 단어를 파이썬이 이미 정렬하는 방법을 알고있는 것으로 번역하는 함수가 필요합니다. 예를 들어 각 단어를 숫자 목록으로 번역 할 수 있습니다. 여기서 각 숫자는 알파벳에서 각 문자가 나오는 위치를 나타냅니다. 이 같은:
my_alphabet = ['a', 'b', 'c']
def custom_key(word):
numbers = []
for letter in word:
numbers.append(my_alphabet.index(letter))
return numbers
x=['cbaba', 'ababa', 'bbaa']
x.sort(key=custom_key)
언어에 여러 문자가 포함되어 있으므로 custom_key 함수는 분명히 더 복잡해야합니다. 그래도 일반적인 아이디어를 얻을 수 있습니다.
이것이 도움이 될지 모르겠지만 locale
모듈을 확인해보십시오 . 로케일을 언어로 설정하고 사용 locale.strcoll
하는 언어의 정렬 규칙을 사용하여 문자열을 비교 하는 데 사용할 수있는 것 같습니다 .
완전한 python3 cmp_to_key 람다 예제 :
from functools import cmp_to_key
nums = [28, 50, 17, 12, 121]
nums.sort(key=cmp_to_key(lambda x, y: 1 if str(x)+str(y) < str(y)+str(x) else -1))
일반적인 개체 정렬과 비교 :
class NumStr:
def __init__(self, v):
self.v = v
def __lt__(self, other):
return self.v + other.v < other.v + self.v
A = ["12", "121"]
A.sort()
key
대신 인수를 사용하십시오 . 처리중인 값을 가져와 정렬 기준으로 사용할 키를 제공하는 단일 값을 반환하는 함수를 사용합니다.
sorted(x, key=somekeyfunc)
참고 URL : https://stackoverflow.com/questions/2531952/how-to-use-a-custom-comparison-function-in-python-3
'IT TIP' 카테고리의 다른 글
ARC-__unsafe_unretained의 의미? (0) | 2020.10.15 |
---|---|
Rabbitmq 관리를 위해 사용자를 재설정하는 방법 (0) | 2020.10.15 |
튜플과 KeyValuePair를 사용하는 것이 언제 더 낫습니까? (0) | 2020.10.14 |
특정 파일 세트에서 변경이 발생하는 경우에만 빌드를 트리거하는 방법 (0) | 2020.10.14 |
String.Format-작동 방식 및 사용자 지정 형식 문자열 구현 방법 (0) | 2020.10.14 |