[python] Seznamy

Honza Král honza.kral na gmail.com
Pondělí Únor 9 14:21:30 CET 2015


Je fajn, ze davas funkcionalni reseni, ale kdyz uz to napises mozna by
stalo za to vysvetlit, v cem je to dobre, proc by to melo nekoho
zajimat?

Ja tam funkcne zadny rozdil nevidim na rozdil od druheho reseni (s
.pop() nebo intersection od alese) a je to o neco horsi nez ciste
funkcionalni reseni pres reduce (ktere nenuti materializaci toho
seznamu uprostred).

Dik
Honza Král
E-Mail: honza.kral na gmail.com
Phone:  +420 606 678585


2015-02-09 14:06 GMT+01:00 Pavel S <pavel na schon.cz>:
> Jeste jedno reseni tu mame, ktere je ciste funkcnionalni, nebot nepouziva imperativni operace jako pop() apod.
>
> result = (
>     set.intersection(
>         *map(
>              set,
>              filter(
>                 operator.truth,
>                 ( list_a, list_b, list_c )))))
>
>
>
> Dne sobota 7. února 2015 22:24:59 UTC+1 Ales Zoulek napsal(a):
>> "lists.pop()" melo byt pravdepodobne "sets.pop()", jinak urcite radsi to druhy.
>>
>>
>>
>> Jinak na to existuje zkratka, ktera dela v zasade to stejne - set.intersection() bere jako parametr libovolny pocet setu. Takze toto by melo byt rozumne kratky a furt dost citelny:
>>
>>
>> non_empty_sets = [set(l) for l in (list_a, list_b, ..) if l]
>>
>> result_set = set.intersection(*non_empty_sets)
>>
>> return list(result_set)
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Fri Feb 06 2015 at 10:55:51 PM Vladimir Macek <ma... na sandbox.cz> wrote:
>> Dovolte poznámku,
>>
>>
>>
>> je fajn, jak Honza dodal dva návrhy. Tipuju, že ten druhý je čitelnější pro
>>
>> začátečníky, je takový imperativní. :-)
>>
>>
>>
>> Doporučoval bych však zkusit pochopit eleganci toho druhého, který je IMO
>>
>> přístupnější pro zkušené a otevírá trochu jiný svět uvažování.
>>
>>
>>
>> Čitelnosti by pomohlo rozdělení na dva řádky (nejdřív nazvat generátor),
>>
>> což jistě Honza ví.
>>
>>
>>
>> Pokud tazateli zároveň půjde o zachování pořadí prvků, může se podívat po
>>
>> typu OrderedSet (http://code.activestate.com/recipes/576694/).
>>
>>
>>
>> Vl.
>>
>>
>>
>> On 6.2.2015 20:50, Honza Král wrote:
>>
>> > tohle je kratka odpoved:
>>
>> >
>>
>> > import operator
>>
>> > reduce(operator.and_, (set(l) for l in (list_a, list_b, list_c) if l))
>>
>> >
>>
>> > ale asi ne nejlepsi (neni prilis citelna)
>>
>> >
>>
>> >
>>
>> > doporucil bych spis neco jako:
>>
>> >
>>
>> > sets = [set(l) for l in (list_a, list_b, ..) if l]
>>
>> >
>>
>> > result =lists.pop()
>>
>> >
>>
>> > for s in sets:
>>
>> >     result &= s
>>
>> > list_vysledny = list(result)
>>
>> >
>>
>> >
>>
>> > Honza Král
>>
>> > E-Mail: honza... na gmail.com
>>
>> > Phone:  +420 606 678585
>>
>> >
>>
>> >
>>
>> > 2015-02-06 20:10 GMT+01:00 Marcus Scalpere <marcus.... na gmail.com>:
>>
>> >> Pěkný večer vinšuji,
>>
>> >> mám několik seznamů a potřebuji zjistit, které jsou a nejsou prázdné (to bych ještě dal) a pokud některé prázdne nejsou, tak je projít a pokud jsou některé hodnoty ve VŠECH, tak je uložit.
>>
>> >> Něco jako:
>>
>> >> list_a = []
>>
>> >> list_b = [x, y, z]
>>
>> >> list_c = [x, y]
>>
>> >> .
>>
>> >> .
>>
>> >> .
>>
>> >> list_vysledny = [x, y]
>>
>> >>
>>
>> >> Snad jsem se vyjádřil jasně a srozumitelně. Děkuji mnohokráte
>>
>>
>>
>> _______________________________________________
>>
>> Python mailing list
>>
>> pyt... na py.cz
>>
>> http://www.py.cz/mailman/listinfo/python
>>
>>
>>
>> Visit: http://www.py.cz
>
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz


Další informace o konferenci Python