You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在一行中为Lambda函数传多值?FizzBuzz单行代码传参疑问

一行实现FizzBuzz:搞定数值范围与多值传入问题

嘿,这个需求我太熟悉了!用一行代码写FizzBuzz确实有种“炫技”的乐趣,咱们直接来解决你的问题:

一、给Lambda传入1-100的数值范围

你提到的map函数问题,核心是没用到Python的range()生成序列。range(1, 101)会直接生成1到100的整数序列(注意左闭右开,所以结束值要写101),把它传给map就能一次性处理所有值了。

正确的一行FizzBuzz代码应该是这样的:

print('\n'.join(map(lambda x: 'FizzBuzz' if x % 15 == 0 else 'Fizz' if x % 3 == 0 else 'Buzz' if x % 5 == 0 else str(x), range(1, 101))))

解释下逻辑:

  • range(1,101)生成目标数值范围,作为map的第二个参数
  • Lambda函数按优先级判断:先检查是否是15的倍数(同时被3和5整除),再依次检查3、5的倍数,最后返回数字本身的字符串
  • 最后用'\n'.join()把所有结果拼接成换行的字符串,一次性打印出来

二、一行给Lambda传入多个独立值

如果不是连续范围,而是零散的多个值,直接把这些值放到列表或元组里传给map就行。比如:

# 传入零散数值
result = list(map(lambda x: 'FizzBuzz' if x%15==0 else 'Fizz' if x%3==0 else 'Buzz' if x%5==0 else str(x), [2,3,5,15,22]))
print('\n'.join(result))

甚至可以直接把值写在map的参数里(只要是可迭代对象就行),比如用(1,4,6,10,30)代替列表也完全没问题。

另外,如果你想更简洁,还可以用生成器表达式替代map,写法也很紧凑:

print('\n'.join('FizzBuzz' if x%15==0 else 'Fizz' if x%3==0 else 'Buzz' if x%5==0 else str(x) for x in range(1,101)))

这个写法和map版本效果完全一样,有时候可读性还更强一点~

内容的提问来源于stack exchange,提问作者Zaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:17:46