Python中map(int, input())构建二维列表的转换逻辑疑问
输出和预期不符的核心原因
- 拆解
map(int, input())的实际执行逻辑:- Python里字符串本身是逐字符可迭代的对象,
map()的工作规则是遍历传入可迭代对象的每一个单独元素,对每个元素执行指定的映射函数,不会把整个可迭代对象当成单个值传入映射函数。 - 当你把
input()拿到的整行字符串(比如第一行输入的"101111")传给map(int, ...)时,map会逐个取出字符串里的每个字符——也就是'1'、'0'、'1'……分别传给int()转成单个数字,最后把这些单数字组成列表,就得到了你看到的逐位拆分的嵌套结构。
- Python里字符串本身是逐字符可迭代的对象,
- 你的认知偏差点在于:默认
map会把传入的字符串作为单个整体传给int()做转换,但Python对字符串的迭代规则就是拆分到单个字符,和遍历列表时逐个取列表元素的逻辑完全一致,没有特殊的整行处理逻辑。
匹配你预期的代码写法
如果你想要得到「每个子列表仅包含整行对应的完整整数」的结果,不需要用map逐字符遍历字符串,直接对整行输入做整体转换即可,参考代码:
maze = [[int(input())] for _ in range(4)]
运行后输出就会符合你的预期,也就是每个子列表对应整行转成的完整整数:[[101111], [101010], [101011], [111011]]。
额外提示:如果你的使用场景是迷宫类题目,需要逐位存取每个格子的数字状态,那你原来写的代码逻辑是完全正确的,只是和你当前“把整行当成一个整数存取”的目标不匹配而已。
内容的提问来源于stack exchange,提问作者new_be
相关产品推荐
相关产品推荐

