Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: HenHanna Newsgroups: comp.lang.python,comp.lang.lisp Subject: Re: How do i get multiple Min() values? Date: Sat, 13 Jul 2024 11:06:04 -0700 Organization: A noiseless patient Spider Lines: 49 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 13 Jul 2024 20:06:05 +0200 (CEST) Injection-Info: dont-email.me; posting-host="0b2917fef9857da2f467d2527da3b2d2"; logging-data="3891301"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19gCcpvIBVIzd+1phClfVop2WhRqwxX2mg=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:isFCfBGRcH8wIZ7CAwG/7uYH7NU= In-Reply-To: Content-Language: en-US Bytes: 2290 On 7/13/2024 5:56 AM, B. Pym wrote: > HenHanna wrote: > >> >> How do i get multiple Min() values? >> >> e.g. for Y = (x-2)*(x-3) for x in range(-10,10) >> the min Y is hit twice >> >> >> print( min( ((x-2)*(x-3), (x, (x-2, x-3))) >> for x in range(-10,10) ) ) >> >> >> >> is this easy in Scheme(Gauche) ? > > Gauche Scheme > > (use gauche.collection) ;; fold2 > > (define (min-by fn lst) > (if (null? lst) > (values '() #f) > (fold2 > (lambda (x best worth) > (let ((score (fn x))) > (cond ((< score worth) (values (list x) score)) > ((= score worth) (values (cons x best) worth)) > (#t (values best worth))))) > (take lst 1) (fn (car lst)) > (cdr lst)))) > > (min-by (lambda(x) (* (- x 2) (- x 3))) (lrange -10 11)) > > ===> > (3 2) > 0 > Thank you... i think Python and Scheme(Gauche) should give me this by default: a list(collection) of all the ( key1 "data1" ... etc ) ( key2 "data2" ... etc ) ... for which the Min key value was seen.