Please improve these comprehensions (was meaning of [ ])
Ben Bacarisse
ben.usenet at bsb.me.uk
Mon Sep 4 16:14:01 EDT 2017
Rustom Mody <rustompmody at gmail.com> writes:
> Here is some code I (tried) to write in class the other day
>
> The basic problem is of generating combinations
<snip>
> Now thats neat as far as it goes but combinations are fundamentally sets
> not lists
>
> So I thought python would do a better job
> I tried translating it to python and sets but it turned out more annoying than
> helpful
> Can someone improve it??
>
> The straightforward translation of the above
> Which is ok so far
>
>
> def c(n,r):
> if r == 0:
> return [[]]
> elif len(n) == 0:
> return []
> else:
> return [[n[0]] + l for l in c(n[1:],r-1)] + c(n[1:],r)
>
>
> Now to go from returning list of lists to set of sets:
def cs(n, r):
if r == 0:
return [set()]
elif len(n) == 0:
return []
else:
return [set([n[0]]) | l for l in cs(n[1:], r-1)] + cs(n[1:], r)
?
It's not so neat if you also want n to be a set rather than a list
because the set equivalents of n[0] and n[1:] are a but more complex but
it's not that bad:
def css(n,r):
if r == 0:
return [set()]
elif len(n) == 0:
return []
else:
rest = n.copy()
e = rest.pop()
return [set([e]) | l for l in css(rest, r-1)] + css(rest, r)
<snip>
--
Ben.
More information about the Python-list
mailing list