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 <[email protected]> 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: [email protected]
>
> > Phone: +420 606 678585
>
> >
>
> >
>
> > 2015-02-06 20:10 GMT+01:00 Marcus Scalpere <[email protected]>:
>
> >> 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
>
> [email protected]
>
> http://www.py.cz/mailman/listinfo/python
>
>
>
> Visit: http://www.py.cz
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python
Visit: http://www.py.cz