Python3에서 cmp (a, b)를 사용하려면 어떻게해야합니까?


16

cmp함수 를 사용하면 code-golf에 매우 유용 할 수 있다고 들었습니다 . 그러나 불행히도 Python 3에는 cmp기능 이 없습니다 .

그렇다면 cmp파이썬 3에서 가장 짧은 것은 무엇 입니까?


3
당신은 당신이 cmp골프의 맥락에서 또는 대안을 찾고 있음을 분명히해야합니다 . 그렇지 않으면 일반적인 프로그래밍 질문으로 매우 빨리 닫힐 수 있습니다.
마틴 엔더

@ MartinBüttner 이것이 OP 3의 골프 조언 질문 과 관련이 있다고 생각합니다. 질문대한 답변cmp 이 Python 3을 요구했지만 답변은 사용 되었습니다.
xnor

@ xnor 나는 그것이 알고 있지만 다른 사람들은 그렇지 않을 수도 있습니다.
마틴 엔더

알아두면 도움이된다면 cmp(a,b)Python 2에서 사용할 수 있습니다 .
mbomb007

답변:


34

파이썬 3에는 없습니다 cmp. 골프를 위해 할 수있는 일

11 자

(a>b)-(a<b)

3 문자 이상 잃습니다 cmp(a,b).

재미있게도 이것은 "공식적인"해결 방법입니다. 의 새로운 파이썬 3 당신이 정말로 필요한 경우 페이지 ( "말한다cmp() 기능을 익스프레션 사용할 수 (a > b) - (a < b)에 대한 동등한 등을 cmp(a, b).)"


15
우선 순위 문제를 조심하십시오! cmp (a, b)의 실제 값은 ((a> b)-(a <b))입니다.
Sparr

a 또는 b가 더 복잡한 표현식 인 경우 (예 : 실행 시간이 매우 긴 함수 호출), 실행 시간이 매우 나쁩니다. 더 나쁜 것은, a 또는 b에 부작용이있는 함수에 대한 호출이 포함되어 있으면 프로그램의 의미를 변경할 수도 있습니다.
Algoman

1
@Algoman Oh noes, 실행 시간, 코드 골프 / s의 가장 중요한 부분. 함수를 두 번 실행하지 않으려면 미리 변수에 할당하십시오 (아마도 바이트를 절약하기 위해 어쨌든 끝날 것입니다 )
Jo King

나는 transpiler를 작업 중입니다. 표현식을 읽고 표현식을 생성해야합니다. 원래 표현의 cmp는 깊게 중첩 될 수 있습니다. 그렇게 목표 코드를 생성한다면 구현하기가 매우 추악하고 어렵습니다 (불가능하지는 않지만).
Algoman

1
그래서 대체 @Algoman cmp(exp1,exp2)와 함께 (lambda a,b:(a>b)-(a<b))(exp1,exp2).
Anders Kaseorg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.