advanced listcomprehenions?

Dan Bishop danb_83 at yahoo.com
Thu Jun 19 02:01:17 CEST 2008


On Jun 18, 4:42 pm, cirfu <circularf... at yahoo.se> wrote:
> I am wondering if it is possible to write advanced listcomprehensions.
>
> For example:
> """Write a program that prints the numbers from 1 to 100. But for
> multiples of three print "Fizz" instead of the number and for the
> multiples of five print "Buzz". For numbers which are multiples of
> both three and five print "FizzBuzz"."""
> Obv it doesnt have to be a list according tot hat definition but
> suppose i want to generate that list.
>
> >>> [["Fizzbuzz",x] for x in xrange(1,101) if x%3 == 0 and x%5 == 0]
>
> [['Fizzbuzz', 15], ['Fizzbuzz', 30], ['Fizzbuzz', 45], ['Fizzbuzz',
> 60], ['Fizzbuzz', 75], ['Fizzbuzz', 90]]
>
> is not what i want. the following does the trick but is ldo not a
> listcomprehension:
>
> for i in xrange(1,101):
>     s = ""
>     if i%3 == 0:
>         s += "Fizz"
>     if i%5 == 0:
>         s += "Buzz"
>     if s:
>         print "%d : %s" % (i,s)
>     else:
>         print i
>
> or to generate a lisrt but not by listcomprehsnion:
> map(lambda x: (not x%3 and not x%5 and "FizzBuzz") or (not x%3 and
> "Fizz")
> or (not x%5 and "Buzz") or x, xrange(1,101))

[(('Fizz' if num % 3 == 0 else '') + ('Buzz' if num % 5 == 0 else ''))
or str(num) for num in xrange(1, 101)]



More information about the Python-list mailing list