[python] Seznamy
Pavel S
pavel na schon.cz
Pondělí Únor 9 14:06:01 CET 2015
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
Další informace o konferenci Python