파이썬 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']
왜냐하면 제 언어에서는 자음이 이 순서로 나오기 때문입니다.
"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키워드 및 functools.cmp_to_key를 사용하여 비교 함수를 변환합니다.
sorted(x, key=functools.cmp_to_key(customsort))
사용key인수(그리고 이전의 것을 변환하는 방법에 대한 레시피를 따릅니다.cmp에 기능하는.key함수)를 선택합니다.
functools기능이 있습니다.cmp_to_keydocs.python.org/3.6/library/functools.html#functools.cmp_to_key 에서 언급됨
전체 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 = [NumStr("12"), NumStr("121")]
A.sort()
print(A[0].v, A[1].v)
A = [obj.v for obj in A]
print(A)
커스텀 정렬() 대신 각 단어를 Python이 이미 정렬 방법을 알고 있는 것으로 변환하는 기능이 필요합니다.예를 들어, 각 단어를 각 숫자가 알파벳에서 각 문자가 발생하는 위치를 나타내는 숫자 목록으로 변환할 수 있습니다.이와 같은 것:
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언어의 정렬 규칙을 사용하여 문자열을 비교합니다.
사용key논쟁 대신에.처리 중인 값을 가져와서 정렬 기준으로 사용할 키를 제공하는 단일 값을 반환하는 함수를 사용합니다.
sorted(x, key=somekeyfunc)
언급URL : https://stackoverflow.com/questions/2531952/how-to-use-a-custom-comparison-function-in-python-3
'programing' 카테고리의 다른 글
| Vuejs mixin의 비동기 방법 (0) | 2023.06.17 |
|---|---|
| Python 로깅 모듈을 사용할 때 로그 출력이 중복됨 (0) | 2023.06.17 |
| 제네릭 타입의 기능적인 리액트 구성 요소를 만드는 방법은 무엇입니까? (0) | 2023.06.17 |
| Android 앱이 Firebase에 연결되지 않음 (0) | 2023.06.17 |
| Oracle에서 Check 문에 하위 조회 사용 (0) | 2023.06.17 |