f (항목)이 가장 작은 목록에서 항목을 찾는 방법은 무엇입니까?


10

목록 l과 함수가 f있습니다. f엄격하게 증가하거나 감소하지 않습니다. 목록 f(item)에서 가장 작은 항목을 어떻게 찾을 수 있습니까? 예를 들어 목록이 다음과 같다고 가정 해 봅시다.

l = [1, 2, 3, 4]

그리고 list(f(x)for x in l):

[2, 9, 0, 3]

f(3)는 다른 것보다 f보다 작으므로 "3"을 인쇄해야합니다. 가장 짧은 방법은 무엇입니까? 나는 처음에 시도했다 :

min(f(x) for x in l)

그러나 이것은 0아닙니다 3. 간결성이 아니라 가독성을 위해 촬영하는 경우 다음을 수행합니다.

index = 0
smallest = f(l[0])
for i in range(len(l)):
    value = f(l[i])
    if value < smallest:
        smallest = value
        index = i

이것은 훌륭하지만 코드 골프에는 끔찍합니다. 골프를 치더라도

i,s=0,f(l[0])
for x in range(len(l)):
 v=f(l[x])
 if v<s:s,i=v,x

이것은 나쁜 해결책입니다. 내가 생각할 수있는 가장 짧은 해결책은 다음과 같습니다.

g=[f(x)for x in l];print(l[g.index(min(g))])

(44 bytes) 어떻게 이것을 더 내릴 수 있습니까?


8
그냥 min(l,key=f).
vaultah

2
@vaultah 답변으로 게시하십시오.
NoOneIsHere 여기

4
@ KevinLau-notKenny 이것은 질문입니다. 그것은 주제입니다.
NoOneIsHere 여기

2
@trichoplax 실제로 나는 이것이 하나라고 생각합니다 : meta.codegolf.stackexchange.com/a/1724/31625
FryAmTheEggman

2
이것은 흥미로운 주제입니다. 아마도 파이썬에 국한되지 않고 일반적인 것으로 만들 수 있습니까? 다른 언어로하는 방법을 보는 것이 흥미로울 수도 있습니다
Luis Mendo

답변:


10

사용 key속성min

@ vaultah가 말했듯이을 사용하십시오 min(l,key=f). min(l,key=f)에서의 최소값을 f(i)i습니다 l.

max, 및 에 적용 할 수도 있습니다 sorted. 예를 들어 in max(l,key=f)의 최대 값은 f(i)입니다 . 를 들어 , 사용은 다음과 같습니다 .ilsortedsorted(l,key=f)


1
나는 이것을 지금 받아들이고 있지만, 그가 게시하면 @ vaultah의 답변을 수락 할 것입니다.
James
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.