목록 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) 어떻게 이것을 더 내릴 수 있습니까?
@vaultah 답변으로 게시하십시오.
—
NoOneIsHere 여기
@ KevinLau-notKenny 이것은 팁 질문입니다. 그것은 주제입니다.
—
NoOneIsHere 여기
@trichoplax 실제로 나는 이것이 하나라고 생각합니다 : meta.codegolf.stackexchange.com/a/1724/31625
—
FryAmTheEggman
이것은 흥미로운 주제입니다. 아마도 파이썬에 국한되지 않고 일반적인 것으로 만들 수 있습니까? 다른 언어로하는 방법을 보는 것이 흥미로울 수도 있습니다
—
Luis Mendo
min(l,key=f)
.