🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
10 messages
10 total messages Started by Jakub Czakaj Tue, 04 Aug 2009 06:43
Tablica funkcji lambda
#26455
Author: Jakub Czakaj
Date: Tue, 04 Aug 2009 06:43
25 lines
1696 bytes
Witam,

chcę wygenerować tablicę funkcji lambda:

lista = [1,2,3,4,5]

funkcje = []

for i in range( len( lista)):
    funkcje.append( lambda x: x[i] )

print funkcje[0](lista)
print funkcje[1](lista)
print funkcje[2](lista)

Kazda z tych funkcji zwraca "5", chciałbym znaleźć sposób na to, aby
zwracała kolejny element listy (czyli 1,2,3,4,5).

Czy jest jakiś sposób na zrobienie tablicy takich funkcji?

Wygenerowanie listy takich funkcji jest mi potrzebne do przekazania
argumentu "cons" do tej funkcji:
http://www.scipy.org/doc/api_docs/SciPy.optimize.cobyla.html

Dziękuję za ewentualne odpowiedzi.
Re: Tablica funkcji lambda
#26459
Author: Wojciech Malinowski
Date: Tue, 04 Aug 2009 07:22
34 lines
1883 bytes
On Aug 4, 8:43 am, Jakub Czakaj <jakub.cza...@gmail.com> wrote:
> Witam,
>
> chcę wygenerować tablicę funkcji lambda:
>
> lista = [1,2,3,4,5]
>
> funkcje = []
>
> for i in range( len( lista)):
>     funkcje.append( lambda x: x[i] )

To jest mniej wiecej ekwiwalent:
i = 1
def get_element(x):
    return x[i]
itd.

Zauwaz, ze i jest tutaj zmienna globalna.

Sprobuj tak:

from functools import partial
def get_element(lista, index):
    return lista[index]
funkcje = []
for i in range(len(lista)):
    funkcje.append(partial(get_element, index=i))
print funkcje[0](lista)
print funkcje[1](lista)
print funkcje[2](lista)

Pozdrawiam,
Wojciech Malinowski
Re: Tablica funkcji lambda
#26475
Author: Radomir Dopieralski
Date: Tue, 04 Aug 2009 07:24
29 lines
1855 bytes
At Mon, 3 Aug 2009 23:43:38 -0700 (PDT), Jakub Czakaj wrote:

> Witam,
>
> chcę wygenerować tablicę funkcji lambda:
>
> lista = [1,2,3,4,5]
>
> funkcje = []
>
> for i in range( len( lista)):
>     funkcje.append( lambda x: x[i] )
>
> print funkcje[0](lista)
> print funkcje[1](lista)
> print funkcje[2](lista)
>
> Kazda z tych funkcji zwraca "5", chciałbym znaleźć sposób na to, aby
> zwracała kolejny element listy (czyli 1,2,3,4,5).


> Czy jest jakiś sposób na zrobienie tablicy takich funkcji?

lista = range(5)
funkcje = [(lambda i: lambda x: x[i])(i) for (i, value) in enumerate(lista)]


-- 
Radomir Dopieralski, http://sheep.art.pl
Re: Tablica funkcji lambda
#26463
Author: Wojciech Muła
Date: Tue, 04 Aug 2009 07:25
42 lines
1903 bytes
On Mon, 3 Aug 2009 23:43:38 -0700 (PDT) Jakub Czakaj
<jakub.czakaj@gmail.com> wrote:

> Witam,
> 
> chcę wygenerować tablicę funkcji lambda:
> 
> lista = [1,2,3,4,5]
> 
> funkcje = []
> 
> for i in range( len( lista)):
>     funkcje.append( lambda x: x[i] )
> 
> print funkcje[0](lista)
> print funkcje[1](lista)
> print funkcje[2](lista)
> 
> Kazda z tych funkcji zwraca "5", chciałbym znaleźć sposób na to, aby
> zwracała kolejny element listy (czyli 1,2,3,4,5).
> 
> Czy jest jakiś sposób na zrobienie tablicy takich funkcji?
> 
> Wygenerowanie listy takich funkcji jest mi potrzebne do przekazania
> argumentu "cons" do tej funkcji:
> http://www.scipy.org/doc/api_docs/SciPy.optimize.cobyla.html
> 
> Dziękuję za ewentualne odpowiedzi.

def foo(idx):
	def funkcja(lista):
		return lista[idx];

	return funkcja

for i in range( len( lista)):
	funkcje.append(foo(i))

w.

-- 
Kupię: http://wm.ite.pl/kupie.html
Re: Tablica funkcji lambda
#26452
Author: i0cus
Date: Tue, 04 Aug 2009 07:44
22 lines
1707 bytes
Witam,

On 4 Sie, 09:25, Wojciech Muła
<wojciech_m...@poczta.null.onet.pl.invalid> wrote:
>
> def foo(idx):
>         def funkcja(lista):
>                 return lista[idx];
>
>         return funkcja
>
> for i in range( len( lista)):
>         funkcje.append(foo(i))

A z dzięki załączonym bateriom można tak:

from operator import itemgetter
funkcje = list(itemgetter(i) for i in range(5))

--
pozdrawiam,
i0
Re: Tablica funkcji lambda
#26462
Author: wysek
Date: Tue, 04 Aug 2009 07:55
31 lines
1859 bytes
On 4 Sie, 08:43, Jakub Czakaj <jakub.cza...@gmail.com> wrote:
> Witam,
>
> chcę wygenerować tablicę funkcji lambda:
>
> lista = [1,2,3,4,5]
>
> funkcje = []
>
> for i in range( len( lista)):
>     funkcje.append( lambda x: x[i] )
>
> print funkcje[0](lista)
> print funkcje[1](lista)
> print funkcje[2](lista)
>
> Kazda z tych funkcji zwraca "5", chciałbym znaleźć sposób na to, aby
> zwracała kolejny element listy (czyli 1,2,3,4,5).
>
> Czy jest jakiś sposób na zrobienie tablicy takich funkcji?

lista = range(1, 6)

funkcja = lambda x: lambda y: y[x]
funkcje = [funkcja(i) for i in range (len (lista))]

for f in funkcje:
    print f (lista)


Piotr Wysocki
Re: Tablica funkcji lambda
#26450
Author: Rob Wolfe
Date: Tue, 04 Aug 2009 08:38
19 lines
1239 bytes
Jakub Czakaj <jakub.czakaj@gmail.com> writes:

> Witam,
>
> chcę wygenerować tablicę funkcji lambda:
>
> lista = [1,2,3,4,5]
>
> funkcje = []
>
> for i in range( len( lista)):
>     funkcje.append( lambda x: x[i] )

Dodaj funkcji anonimowej drugi parametr z domyślną wartością,
która jest ewaluowana tylko raz w momencie tworzenia funkcji, czyli:

      funkcje.append( lambda x, i=i: x[i] )

RW
Re: Tablica funkcji lambda
#26457
Author: Jakub Czakaj
Date: Tue, 04 Aug 2009 10:41
22 lines
1757 bytes
On 4 Sie, 10:38, Rob Wolfe <r...@smsnet.pl> wrote:
> Jakub Czakaj <jakub.cza...@gmail.com> writes:
> > Witam,
>
> > chcę wygenerować tablicę funkcji lambda:
>
> > lista = [1,2,3,4,5]
>
> > funkcje = []
>
> > for i in range( len( lista)):
> >     funkcje.append( lambda x: x[i] )
>
> Dodaj funkcji anonimowej drugi parametr z domyślną wartością,
> która jest ewaluowana tylko raz w momencie tworzenia funkcji, czyli:
>
>       funkcje.append( lambda x, i=i: x[i] )
>
> RW

Dziękuję wszystkim za pomoc. Cytowany sposób jest dla mnie najbardziej
intuicyjny.
Re: Tablica funkcji lambda
#26461
Author: Adam Przybyla
Date: Tue, 04 Aug 2009 11:02
27 lines
1734 bytes
Jakub Czakaj <jakub.czakaj@gmail.com> wrote:
> On 4 Sie, 10:38, Rob Wolfe <r...@smsnet.pl> wrote:
>> Jakub Czakaj <jakub.cza...@gmail.com> writes:
>> > Witam,
>>
>> > chcę wygenerować tablicę funkcji lambda:
>>
>> > lista = [1,2,3,4,5]
>>
>> > funkcje = []
>>
>> > for i in range( len( lista)):
>> >     funkcje.append( lambda x: x[i] )
>>
>> Dodaj funkcji anonimowej drugi parametr z domyślną wartością,
>> która jest ewaluowana tylko raz w momencie tworzenia funkcji, czyli:
>>
>>       funkcje.append( lambda x, i=i: x[i] )
>>
>> RW
> 
> Dziękuję wszystkim za pomoc. Cytowany sposób jest dla mnie najbardziej
> intuicyjny.
	... to moze podsumowujac:
funkcje=[lambda x, i=i: x[i] for i in range(len(lista)]
Z powazaniem
								Adam Przybyla
Re: Tablica funkcji lambda
#26467
Author: Tomasz Elendt
Date: Wed, 05 Aug 2009 20:02
29 lines
1548 bytes
On 2009-08-04, Jakub Czakaj <jakub.czakaj@gmail.com> wrote:
> Witam,
>
> chcę wygenerować tablicę funkcji lambda:
>
> lista = [1,2,3,4,5]
>
> funkcje = []
>
> for i in range( len( lista)):
>     funkcje.append( lambda x: x[i] )
>
> print funkcje[0](lista)
> print funkcje[1](lista)
> print funkcje[2](lista)
>
> Kazda z tych funkcji zwraca "5", chciałbym znaleźć sposób na to, aby
> zwracała kolejny element listy (czyli 1,2,3,4,5).


Najlepiej użyć tzw. „domknięć”.

  lista = [1, 2, 3, 4, 5]
  funkcje = [(lambda i: lambda x: x[i])(j) for j in range(len(lista))]

Choć w tym konkretnym przypadku można skorzystać z modułu operator.

  from tools import itemgetter
  funkcje = [itemgetter(i) for i in range(len(lista))]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads