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.k...@gmail.com Phone: +420 606 678585 2015-02-09 14:06 GMT+01:00 Pavel S <pa...@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...@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...@gmail.com >> >> > Phone: +420 606 678585 >> >> > >> >> > >> >> > 2015-02-06 20:10 GMT+01:00 Marcus Scalpere <marcus....@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...@py.cz >> >> http://www.py.cz/mailman/listinfo/python >> >> >> >> Visit: http://www.py.cz > > _______________________________________________ > Python mailing list > python@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz _______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz