[python] Diskuse: "Strucny seznam"

geon geon na post.cz
Čtvrtek Říjen 6 16:13:54 CEST 2005


JO!  TO JE VONO!

geon

P.S. Tvoje illustrační příklady si  musím často tisknout, protože z 
obrazovky se mi to hůře chápe :-). Díky za ně!


Petr Prikryl napsal(a):

>slacker
>  
>
>>Tipoval bych, ze tuto vlastnost prevzal Python z
>>fukncionalnich programovacich jazyku. No a pokud
>>je mi znamo, tak se teto konstrukci vzdy rikalo
>>"generator seznamu". Takze termin "strucny seznam"
>>je asi opravdu trochu mimo.
>>    
>>
>
>Super! 
>
>    Generátor seznamu
>
>Nemám sice dobré znalosti z funkcionálních jazyků
>a přístup, který je použit v Pythonu, nepovažuji 
>za výlučně funkcionální, nicméně jsem měl na mysli
>naprosto stejný překlad. Moje zdůvodnění vychází 
>přímo z vlastností Pythonu (generátory) a z obecného
>principu v programovacích jazycích (konstruktor):
>
>1. Syntaktický zápis (případně prázdné)
>   posloupnosti v hranatých závorkách je speciální
>   formou konstruktoru seznamu. Vzniká nový objekt
>   typu seznam a má určenou počáteční hodnotu. 
>   (Zatím bez souvislosti s list comprehension, 
>   podobně, jako se například apostrofům v Pascalu 
>   říká konstruktor řetězce.)
>   
>   lst1 = []
>   lst2 = [ 1, 2, 3 ]
>   
>2. Vnitřek u list comprehension je čistokrevný 
>   "generator expression" (viz 5.2.5 Generator
>   expressions), což je jen jiný zápis obecného
>   generátoru. Výsledkem je objekt generátoru.
>   Odkaz na něj má vlastnosti iterátoru (podporuje
>   metodu next()). 
>   
>3. Dohromady je to konstruktor seznamu krmený
>   generátorem položek, tedy "generátor seznamu".   
>   
>
>Ilustrační příklady
>===================
>
>Nejdříve výsledek list comprehension:
>
>  >>> lst = [ x for x in xrange(10) ]
>  >>> lst
>  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>
>Vnitřní "generator expression" použitý jako obecný
>generátor:
>
>  >>> g = (x for x in xrange(10))
>  >>> g
>  <generator object at 0x00928080>
>  >>> for i in g:
>  ...     print i
>  ...
>  0
>  1
>  2
>  3
>  4
>  5
>  6
>  7
>  8
>  9
>  >>> g.next()
>  Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
>  StopIteration
>
>Konstrukci seznamu můžeme provést pomocí právě
>takového generátoru:
>
>  >>> g = (x for x in xrange(10))
>  >>> lst = list(g)
>  >>> lst
>  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>  
>Když to zapíšeme bez pomocné refrence g,
>dostaneme:
>
>  >>> lst = list((x for x in xrange(10)))
>  >>> lst
>  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>                                             
>Když 'list((' nahradíme '[' a '))' nahradíme ']',
>dostaneme přesně "list comprehension". Jde
>pravděpodobně jen o syntakticky jinou formu zápisu
>téhož.
>
>pepr
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python
>
>
>  
>




Další informace o konferenci Python