Python一行代码读取多种类型输入
Python 不像 C++ 那样,天生自带一个>>这样的链式流式输入操作符。然而,借助map()搭配operator.call或者直接使用类型函数,依然可以在一行代码中优雅地解析混合类型数据(例如int、str、int)。相比于列表推导式,这种方式更加简洁,可读性也明显更优。
聊一个值得关注的细节:Python 的标准输入默认会以字符串形式返回一整行内容。因此,你需要手动进行拆分和类型转换。最常见的写法是列表推导式,它也能胜任这个任务:
a, b, c = [f(x) for f, x in zip((int, str, int), input().split())]
不过,坦白讲,这段代码显得有些冗长,读起来也不够流畅。那么,有没有更优雅的解决方案?当然有,而且 Python 社区早已探索出新玩法——使用 map() 结合 operator.call:
from operator import call a, b, c = map(call, (int, str, int), input().split())
这究竟是如何工作的?我们来逐一拆解。
核心原理其实很简单:
input().split()会将输入按空白字符拆分成一个字符串列表。例如,你输入 "42 hello 100" 时,它会变成['42', 'hello', '100']。(int, str, int)是一个类型函数元组,用于定义每个字段应该执行哪种转换。map(call, funcs, args)本质上等价于map(lambda f, x: f(x), funcs, args)。它会依次将每个类型函数与对应的字符串配对,并调用该函数完成类型转换。
几个关键注意事项:
- 输入字段的数量必须与你定义的类型元组长度严格一致,否则会抛出
ValueError(提示 too many values to unpack 或 not enough values to unpack)。 - 若希望代码更健壮,例如处理空输入或格式混乱的情况,建议在外层包裹
try...except进行异常捕获。 - 即使是
str这种无需转换的类型,也建议显式写出。一是为了保持接口一致性,二是便于后续扩展——比如你可能想换成str.strip或自定义解析器。 - 这个模式不太适合处理复杂的嵌套结构(如列表或字典)。遇到这类场景,使用
json.loads()或专门的解析逻辑会更加靠谱。
进阶玩法:如果这个模式在你的代码中频繁使用,完全可以将其封装成一个可复用的函数:
from operator import call
def read_types(*types):
return map(call, types, input().split())
# 举个例子
a, b, c = read_types(int, str, int)
x, y = read_types(float, float)
这种写法兼顾了简洁性、表达力,并且非常 Pythonic。相比那些看着就让人心累的“丑陋推导式”,它显然是更值得推荐的选择。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
RecyclerView不显示内容的常见原因及修复
RecyclerView无数据显示,常见原因为Adapter的getItemCount()返回0。修复方法是将硬编码的0改为动态返回数据大小,如contacts size()。增强版Adapter需实现空安全及刷新支持。其他检查点包括设置布局管理器、避免RecyclerView高度为wrap_content、确保Item布局宽高合理及数据非空验证。
Python一行代码读取多种类型输入
使用`map(call,(int,str,int),input() split())`可一行代码解析混合类型输入,实现类型自动转换,比列表推导式更简洁。输入字段数量需与类型元组严格一致,支持封装为`read_types`函数复用。
Java中高效操作对象集合:避免无意义的Map构建
直接遍历对象集合并访问嵌套字段执行操作,时间复杂度O(n)且无额外内存开销。先构建Map再遍历则增加哈希表初始化、键值插入和二次迭代消耗,数据量大时性能差距显著,应避免此类功能冗余。
BoxLayout仅居中一个组件其余默认对齐的方法
在Swing的BoxLayout(Y_AXIS)中,setAlignmentX无法单独居中组件,因为该布局下所有组件的对齐由容器统一管理。三种可靠方案:嵌套JPanel通过分组隔离可分别设置左对齐和居中;GridBagLayout可独立控制每个组件的对齐方式;RelativeLayout允许组件单独设置其对齐方式。
Avro枚举兼容性:新增值失败原因与正确演进实践
Avro枚举向后兼容依赖二进制索引映射,JSON序列化因绕过索引机制导致新增符号失败;default仅对字段缺失生效,无法处理未知符号。演进需在末尾追加符号并采用二进制格式,推荐启用SchemaRegistry确保兼容。
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-07-07 06:56
2026-07-07 06:55
2026-07-07 06:55
2026-07-07 06:55
2026-07-07 06:55
2026-07-07 06:55
2026-07-07 06:55
2026-07-07 06:54
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

