In python you can replicate a string by using the multiplication operator:
print('aaa' * 3) # aaaaaaaaa
Also, boolean values are implicitly casted to integers on multiplication. Thus, if you do
"Fizz" * (not i % 3)
List comprehension is expressed as
L = [mapping - expression for element in source - list if filter - expression ]
now, replace "for element in source-list" part with
for i in range(1, 100)
"mapping-expression" here is
"Fizz" * (not i % 3) + "Buzz" * (not i % 5) or i
when the booleans returned from (not i % 3) or (not i % 5) is multiplied with strings "Fizz" and "Buzz":
"Fizz" * True # returns "Fizz" "Buzz" * False # returns ""
then the Strings returned above are concatenated
"Fizz" + ""
You can use:
["Fizzbuzz"
if (i % 3 == 0 and i % 5 == 0)
else "Fizz"
if (i % 3 == 0)
else "Buzz"
if (i % 5 == 0)
else i
for i in x
]
>>> 3 % 3
0
>>>
not 3 % 3
True
>>>
>>>
3 % 2
1
>>>
not 3 % 2
False
>>>
>>>
if 0:
...print 'true'
...
>>>
if 1:
...print 'true'
...
true >>>
False * 'Fizz'
'' >>>
True * 'Fizz'
'Fizz'
My personal favorite:
#!python from __future__ import print_function def fizz_buzz(lower = 1, upper = 101): return ["Fizz" * (x % 3 == 0) + "Buzz" * (x % 5 == 0) or str(x)\ for x in range(lower, upper) ] print('\n'.join(fizz_buzz()))
I think the following approach helps me understanding the list comprehension structure.
def fizzBuzz(upper_limit):
def mapper(a):
result = ''
if a % 3 == 0:
result = result + 'Fizz'
if a % 5 == 0:
result = result + 'Buzz'
return result
return [mapper(x) if mapper(x)
else x
for x in range(1, upper_limit + 1)
]
fizzBuzz(16)[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16]
June 18, 2021
So, we saw how we can solve fizzbuzz, but if you are challenged to solve it in one line then don’t worry we got you covered. I will show you three ways to solve it. The last two solutions are picked from Github.
Also read –> How to make your own audiobook from pdf using python
# fizzbuzz using list comprehension(easy) fizzbuzz = ['fizzbuzz' if v % 3 == 0 and v % 5 == 0 else 'fizz' if v % 3 == 0 else 'buzz' if v % 5 == 0 else v for v in range(1, 51) ] print('First way\n', fizzbuzz) # fizzbuzz using list comprehension(intermediate) from github fizzbuzz = ["Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or str(i) for i in range(1, 51)] print('\n Second way\n', fizzbuzz) # fizzbuzz using lambda - (intermediate) from github fizzbuzz = list(map(lambda i: "Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or str(i), range(1, 51))) print('\n Third way\n', fizzbuzz)
In the comprehension, it loops for every anycodings_fizzbuzz number from 1 to 99, and if i%3 anycodings_fizzbuzz evaluates to True or i=3; 3%3, then anycodings_fizzbuzz "Fizz" is printed and the same is true anycodings_fizzbuzz for "Buzz" if i%5 == 0.,I think the following approach helps me anycodings_fizzbuzz understanding the list comprehension anycodings_fizzbuzz structure.,The same goes for Buzz, and the result anycodings_fizzbuzz for each i in the range is just the anycodings_fizzbuzz concatenation of the two.,when i is divisible by 3 or 5, i % 3 and anycodings_fizzbuzz i % 5 returns 0, any other integer anycodings_fizzbuzz retuned when i is not divisible.
I was messing around with some different anycodings_python fizz buzz scripts as I learn python. I came anycodings_python across this one which works great but I anycodings_python can't decipher how it works. I know how the anycodings_python normal fizz buzz works with a for loop and anycodings_python "if i % 3 == 0 and i % 5 == 0". What has me anycodings_python stumped is how "Fizz"(not i%3) + "Buzz"(not anycodings_python i%5)" works.
x = ["Fizz" * (not i % 3) + "Buzz" * (not i % 5) or i
for i in range(1, 100)
]
In python you can replicate a string by anycodings_fizzbuzz using the multiplication operator:
print('aaa' * 3) # aaaaaaaaa
Also, boolean values are implicitly anycodings_fizzbuzz casted to integers on multiplication. anycodings_fizzbuzz Thus, if you do
"Fizz" * (not i % 3)
List comprehension is expressed as
L = [mapping - expression for element in source - list if filter - expression ]
now, replace "for element in anycodings_fizzbuzz source-list" part with
for i in range(1, 100)
"mapping-expression" here is
"Fizz" * (not i % 3) + "Buzz" * (not i % 5) or i
when the booleans returned from (not i % anycodings_fizzbuzz 3) or (not i % 5) is multiplied with anycodings_fizzbuzz strings "Fizz" and "Buzz":
"Fizz" * True # returns "Fizz" "Buzz" * False # returns ""
then the Strings returned above are anycodings_fizzbuzz concatenated
"Fizz" + ""
You can use:
["Fizzbuzz"
if (i % 3 == 0 and i % 5 == 0)
else "Fizz"
if (i % 3 == 0)
else "Buzz"
if (i % 5 == 0)
else i
for i in x
]
>>> 3 % 3
0
>>>
not 3 % 3
True
>>>
>>>
3 % 2
1
>>>
not 3 % 2
False
>>>
>>>
if 0:
...print 'true'
...
>>>
if 1:
...print 'true'
...
true >>>
False * 'Fizz'
'' >>>
True * 'Fizz'
'Fizz'
My personal favorite:
#!python from __future__ import print_function def fizz_buzz(lower = 1, upper = 101): return ["Fizz" * (x % 3 == 0) + "Buzz" * (x % 5 == 0) or str(x)\ for x in range(lower, upper) ] print('\n'.join(fizz_buzz()))