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