Thread View: pl.comp.lang.python
10 messages
10 total messages
Started by Jakub Czakaj
Tue, 04 Aug 2009 06:43
Tablica funkcji lambda
Author: Jakub Czakaj
Date: Tue, 04 Aug 2009 06:43
Date: Tue, 04 Aug 2009 06:43
25 lines
1696 bytes
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
Author: Wojciech Malinowski
Date: Tue, 04 Aug 2009 07:22
Date: Tue, 04 Aug 2009 07:22
34 lines
1883 bytes
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
Author: Radomir Dopieralski
Date: Tue, 04 Aug 2009 07:24
Date: Tue, 04 Aug 2009 07:24
29 lines
1855 bytes
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
Author: Wojciech Muła
Date: Tue, 04 Aug 2009 07:25
Date: Tue, 04 Aug 2009 07:25
42 lines
1903 bytes
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
Author: i0cus
Date: Tue, 04 Aug 2009 07:44
Date: Tue, 04 Aug 2009 07:44
22 lines
1707 bytes
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
Author: wysek
Date: Tue, 04 Aug 2009 07:55
Date: Tue, 04 Aug 2009 07:55
31 lines
1859 bytes
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
Author: Rob Wolfe
Date: Tue, 04 Aug 2009 08:38
Date: Tue, 04 Aug 2009 08:38
19 lines
1239 bytes
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
Author: Jakub Czakaj
Date: Tue, 04 Aug 2009 10:41
Date: Tue, 04 Aug 2009 10:41
22 lines
1757 bytes
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
Author: Adam Przybyla
Date: Tue, 04 Aug 2009 11:02
Date: Tue, 04 Aug 2009 11:02
27 lines
1734 bytes
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
Author: Tomasz Elendt
Date: Wed, 05 Aug 2009 20:02
Date: Wed, 05 Aug 2009 20:02
29 lines
1548 bytes
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