[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