使用str.replace搭配map时的异常行为及原因咨询
map与str.replace结合的输出逻辑解析
要搞懂这几组代码的输出,核心是明确map函数的参数传递规则和str.replace的调用方式:
map(func, iter1, iter2, ...)会依次从每个可迭代对象中取对应位置的元素,作为func的参数,直到最短的可迭代对象耗尽。str.replace本质是字符串的实例方法,完整调用形式为str.replace(s, old, new)(s是要操作的字符串实例,old是待替换子串,new是替换后的内容)。
下面逐个拆解你的代码:
1. 代码:print(list(map(str.replace, "abc", "ab", "b")))
输出:['b']
三个可迭代对象分别是 "abc"(长度3)、"ab"(长度2)、"b"(长度1),map仅执行1次迭代:
- 取
"abc"的第一个元素"a"作为s,"ab"的第一个元素"a"作为old,"b"的第一个元素"b"作为new - 执行
"a".replace("a", "b"),结果为"b",最终列表就是['b']
2. 代码:print(list(map(str.replace, "abc", "b", "c")))
输出:['a']
三个可迭代对象长度分别是3、1、1,map执行1次迭代:
- 取
"abc"的第一个元素"a"作为s,"b"的第一个元素"b"作为old,"c"的第一个元素"c"作为new - 执行
"a".replace("b", "c"),因为"a"中无"b",直接返回原字符串"a",最终列表是['a']
3. 代码:print(list(map(str.replace, "abc", "abc", "abc")))
输出:['a', 'b', 'c']
三个可迭代对象长度都是3,map执行3次迭代:
- 第1次:
s="a",old="a",new="a"→"a".replace("a", "a")返回"a" - 第2次:
s="b",old="b",new="b"→"b".replace("b", "b")返回"b" - 第3次:
s="c",old="c",new="c"→"c".replace("c", "c")返回"c"
最终得到列表['a', 'b', 'c']
内容的提问来源于stack exchange,提问作者Eilonlif
相关产品推荐
相关产品推荐

