要清除我在python中的lambda,map和list的概念,我尝试使用lambda在一行中实现this solution,而不是在map函数内部将函数“ rs”作为参数传递,如下所示代码。
#Print Fizz, Buzz and FizzBuzz
def rs( n ):
if ( n % 3 == 0 and n % 5 == 0 ):
return "FizzBuzz"
elif ( n % 3 == 0 ):
return "Fizz"
elif ( n % 5 == 0 ):
return "Buzz"
else:
return n
print (list( map ( rs , [ i for i in range( 1,100 ) ] ) ) )
[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16, 17, 'Fizz', 19, 'Buzz', 'Fizz', 22, 23, 'Fizz', 'Buzz', 26, 'Fizz', 28, 29, 'FizzBuzz', 31, 32, 'Fizz', 34, 'Buzz', 'Fizz', 37, 38, 'Fizz', 'Buzz', 41, 'Fizz', 43, 44, 'FizzBuzz', 46, 47, 'Fizz', 49, 'Buzz', 'Fizz', 52, 53, 'Fizz', 'Buzz', 56, 'Fizz', 58, 59, 'FizzBuzz', 61, 62, 'Fizz', 64, 'Buzz', 'Fizz', 67, 68, 'Fizz', 'Buzz', 71, 'Fizz', 73, 74, 'FizzBuzz', 76, 77, 'Fizz', 79, 'Buzz', 'Fizz', 82, 83, 'Fizz', 'Buzz', 86, 'Fizz', 88, 89, 'FizzBuzz', 91, 92, 'Fizz', 94, 'Buzz', 'Fizz', 97, 98, 'Fizz']
欢迎您提供任何帮助。最好!
答案 0 :(得分:4)
for x in range(1, 100):
print(((x % 3 == 0) * 'Fizz' + (x % 5 == 0) * 'Buzz') or x)
答案 1 :(得分:3)
不需要lambda函数,列表理解就足够了。
li = ['FizzBuzz' if i%15 == 0 else 'Fizz' if i%3 == 0 else 'Buzz' if i%5 == 0 else i for i in range(1, 100)]
输出将为
[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14,
'FizzBuzz', 16, 17, 'Fizz', 19, 'Buzz', 'Fizz', 22, 23, 'Fizz', 'Buzz', 26,
'Fizz', 28, 29, 'FizzBuzz', 31, 32, 'Fizz', 34, 'Buzz', 'Fizz', 37, 38,
'Fizz', 'Buzz', 41, 'Fizz', 43, 44, 'FizzBuzz', 46, 47, 'Fizz', 49, 'Buzz',
'Fizz', 52, 53, 'Fizz', 'Buzz', 56, 'Fizz', 58, 59, 'FizzBuzz', 61, 62,
'Fizz', 64, 'Buzz', 'Fizz', 67, 68, 'Fizz', 'Buzz', 71, 'Fizz', 73, 74,
'FizzBuzz', 76, 77, 'Fizz', 79, 'Buzz', 'Fizz', 82, 83, 'Fizz', 'Buzz', 86,
'Fizz', 88, 89, 'FizzBuzz', 91, 92, 'Fizz', 94, 'Buzz', 'Fizz', 97, 98,
'Fizz']
lambda函数也将如下所示,并给出相同的答案!
rs = lambda i: 'FizzBuzz' if i%15 == 0 else 'Fizz' if i%3 == 0 else 'Buzz' if i%5 == 0 else i
print (list( map ( rs , [ i for i in range( 1,100 ) ] ) ) )
或者单线
print (list( map ( lambda i: 'FizzBuzz' if i%15 == 0 else 'Fizz' if i%3 == 0 else 'Buzz' if i%5 == 0 else i , [ i for i in range( 1,100 ) ] ) ) )
答案 2 :(得分:1)
将 rs 替换为如下的 lambda 功能
print (list( map ( lambda n:"FizzBuzz" if n % 3 == 0 and n % 5 == 0 else "Fizz" if n % 3 == 0 else "Buzz" if n % 5 == 0 else n , [ i for i in range( 1,100 ) ] ) ) )