[python] List comprehention
Roman Miklos
RMiklos na pss.sk
Úterý Listopad 14 10:18:01 CET 2006
No, ale ono se to dá napsat i takhle:
lst = [f
for a in arguments
for f in glob.glob(a)
]
Je to vlastně jen jinak napsané
lst = []
for a in arguments:
for f in glob.glob(a):
lst.append(f)
Diky za tento pekny priklad P.Prikryl,
Teraz uz list-comprehention chapem, nerozumel som tomu ked to bolo v
jednom riadku.
Uznavam, moj odpor k tomu bol sposobeny neznalostou.
"Petr Přikryl" <prikryl na atlas.cz>
Sent by: python-bounces na py.cz
13.11.2006 23:36
Please respond to
Konference PyCZ <python na py.cz>
To
python na py.cz
cc
Subject
[python] Je tohle skutecne krasne reseni? (bylo Buducnost Pythonu: lambda,
map, filter)
Roman Miklos
> # pouzitie reduce()
> filez = reduce(lambda x,y: x+y, map(glob.glob, arguments))
> print filez
A v čem je ten kód elegantní. Ano, funguje. Ale v čem je
tak dobrý? Je dobrý proto, že mu někteří vyznavači rozumí
a neználci nikoliv? Je dobrý proto, že se za cenu nutné
znalosti tří speciálních funkcí dá řešení zapsat na jeden
řádek? V čem je ta přehlednost? Když bys to viděl poprvé
a neznal bys lambda kalkul, tak si budeš myslet, že takové
řešení vymyslel leda blázen! Vždyť se na to koukni nezaujatě.
ze seznamu masek chceš dostat seznam odpovídajících jmen
souborů. Kdybys nevěděl, čemu se říká "glob" a že plus
tady není sčítání ale append do seznamu a reduce v podstatě
nic neredukuje a jen elementy do toho seznamu (díky záhadnému
plus) složí... V čem je ten kód tak dobrý? Nic proti soutěžím
v bizarnosti kódu. Je to někdy dobrá zábava. Ale z hlediska
pochopení takový kód stojí za h***o (za hovno). A nebude
mu rozumět ani znalec lambda kalkulu, který nebude vědět
že plus tady není plus, protože glob.glob vrací seznam.
Roman Miklos napsal(a):
> Mas pravdu, ze je to otazka vkusu, ale ja osobne
> si myslim, ze tento list-comprehention
> [f for a in arguments for f in glob.glob(a)]
> je krkolomnejsi ako tento reduce
> filez = reduce(operator.add, map(glob.glob, arguments))
No, ale ono se to dá napsat i takhle:
lst = [f
for a in arguments
for f in glob.glob(a)
]
Je to vlastně jen jinak napsané
lst = []
for a in arguments:
for f in glob.glob(a):
lst.append(f)
Myslím, že zanořený cyklus for zná mnohem více lidí,
než lambda kalkul.
pepr
_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python
Roman Miklos <RMiklos na pss.sk>
Sent by: python-bounces na py.cz
14.11.2006 09:30
Please respond to
Konference PyCZ <python na py.cz>
To
Konference PyCZ <python na py.cz>
cc
Subject
[python] List comprehention
List comprehention som doteraz okrem trivialnych prikladov nikdy nepouzil.
Kedze to vsak ma v buducnosti v Pythone nahradit ine konstrukcie zacinam
sa o to zaujimat.
Zaujalo, ma ze
filez = reduce(lambda x,y: x+y, map(glob.glob, arguments))
alebo
filez=[]
for arg in arguments:
arg_list=glob.glob(arg)
filez += arg_list
sa da napisat cez generator zoznamu napisat takto:
[f for a in arguments for f in glob.glob(a)]
Nemozem vsak pochopit ako sa ten zapis skonstruuje:-) Uff, je to pre mna
intuitivne asi tak ako teoria relativity.
Da sa to nejako rozobrat na casti, alebo prezatvorkovat, aby bolo vidiet
co k comu patri? Moze mi to niekto vysvetlit?
Mgr. Ing. Roman MIKLÓŠ
Prvá stavebná sporiteľňa a.s.
Bajkalská 30, P. O. Box 48
829 48 Bratislava 25
Tel.: +421/ 2 / 582 31 174
Fax: +421/ 2 / 582 31 109
_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python
Mgr. Ing. Roman MIKLÓŠ
Prvá stavebná sporiteľňa a.s.
Bajkalská 30, P. O. Box 48
829 48 Bratislava 25
Tel.: +421/ 2 / 582 31 174
Fax: +421/ 2 / 582 31 109
Další informace o konferenci Python