Pour clarifier mes concepts de lambda, map & list en python, j'essaie d'implémenter cette solution en une seule ligne en utilisant lambda au lieu de passer la fonction "rs" comme paramètre à l'intérieur de la fonction de carte comme indiqué dans le code ci-dessous.
[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']
#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 ) ] ) ) )
Toute aide à cet égard est la bienvenue. Meilleur!
3 Réponses :
Pas besoin de fonction lambda, une compréhension de liste devrait suffire.
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 ) ] ) ) )
Le résultat sera
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 ) ] ) ) )
Aussi le lambda La fonction sera comme ci-dessous et donne la même réponse!
[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']
Ou un one-liner
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)]
Merci pour la réponse @devesh. Aussi, pourriez-vous s'il vous plaît m'aider à faire de manière lambda. J'ai essayé avec ceci: list (map (lambda x: "FizzBuzz" if (n% 3 == 0 et n% 5 == 0) else ("Fizz" if (n% 3 == 0) else ("Bizz" if (n% 5 == 0) else n) for [i for i in range (1,100)])) Mais cela ne fonctionne pas
Un lambda permettrait de passer n
et de le réutiliser plus tard. Comme lambda n: [... range (1, n)]
Vous avez ajouté la fonction lambda, veuillez vérifier! J'ai défini la fonction lambda rs
séparément
for x in range(1, 100): print(((x % 3 == 0) * 'Fizz' + (x % 5 == 0) * 'Buzz') or x)
Remplacez le rs par la fonction lambda comme ci-dessous
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 ) ] ) ) )