> Mě se líbí explicitní použití funkcí map() a filter(), protože je to pro > začátečníka čitelnější a pochopitelnější, než List Comprehension
Tohle me zajima - ja mam presne opacnou zkusenost. Bavime se o zacatecnicich v programovani (s temi mam zkusenost ja), ci jen zacatecniky s pythonem, ale programatory? Diky Jinak samozrejme souhlas s dalsimi body, jen je, dle meho, potreba dbat na to, aby kod byl citelny - casto je lepsi mit mene efektivni implementaci, ktera je na prvni pohled zrejma. Honza Král E-Mail: honza.k...@gmail.com Phone: +420 606 678585 2015-02-09 15:33 GMT+01:00 Jan Bednařík <jan.bedna...@gmail.com>: > Mě se líbí explicitní použití funkcí map() a filter(), protože je to pro > začátečníka čitelnější a pochopitelnější, než List Comprehension, kde si ty > funkce musí domyslet. Nicméně List Comprehension je v Pythonu idiomatické > řešení, a čím dříve ho začátečník pochopí a naučí se ho používat, tím lépe. > > Myslím si ale, že re-implementovat funkci reduce() vlastním for cyklem, není > úplně šťastné řešení. Tam kde to jde bych se držel hotových nástrojů ze > standardní knihovny. V tomhle případě je ale set.intersection() lepší volba > než reduce(and_, ...). > > > Každopádně asi všechna navržená řešení nefungují, protože nepočítají s > variantou, že budou všechny vstupní seznamy prázdné. Já bych to řešil takto: > > sets = [set(l) for l in (list_a, list_b, list_c) if l] > result = list(set.intersection(*sets)) if sets else [] > > Honza > > 2015-02-09 14:21 GMT+01:00 Honza Král <honza.k...@gmail.com>: >> >> 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 > > > > _______________________________________________ > 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