解析Python中join()配合format()与列表使用时的运行差异原因
join() 方法运行逻辑差异说明 输出差异和format()方法没有直接关联,核心原因是两次调用join()时传入的可迭代对象类型不同。str.join(iterable)的核心规则是:遍历传入的可迭代对象,把调用join的分隔符插在遍历得到的每两个元素中间。
两个示例的逻辑拆解
第一个示例:
"=".join(ina)format()执行完成后返回的ina是一个完整字符串:"This is my house."。Python中字符串本身是字符级的可迭代对象,遍历它时得到的最小单元是每一个单个字符(包括空格、标点),所以等号会被插入到每两个相邻字符中间,最终输出每个字符用等号连接的效果。
哪怕不用format()拼接,直接写"=".join("This is my house."),得到的结果完全一致。第二个示例:
"_".join(["Mayor in", "is the", "one to, done"])
这次传入的是一个元素为字符串的列表,join()遍历列表时得到的最小单元是列表里存储的三个完整字符串元素,所以下划线只会被插入到三个完整字符串的中间,最终输出三个短语用下划线连接的效果。
补充说明
- 如果希望第一个示例里的字符串不被拆成单个字符拼接,只需要把字符串作为单个元素放进可迭代对象(比如列表)再传给
join()即可,例如"|".join([ina])会直接输出完整的原字符串,不会插入多余分隔符。 - 不建议使用
list作为变量名,它是Python内置的列表类型关键字,用作变量名会覆盖内置方法,导致后续调用list()做类型转换时出现报错。
# 验证代码 ina = "{a}{aa}{aaa}{aaaa}".format(a = "This ", aa = "is ", aaa = " my", aaaa = " house.") print("=".join(ina)) print("=".join("This is my house.")) # 和上一行输出完全一致 str_list = ["Mayor in", "is the", "one to, done"] print("_".join(str_list)) print("|".join([ina])) # 传入单元素列表,不会拆分字符
运行输出:
T=h=i=s= =i=s= = =m=y= =h=o=u=s=e=. T=h=i=s= =i=s= = =m=y= =h=o=u=s=e=. Mayor in_is the_one to, done This is my house.
内容的提问来源于stack exchange,提问作者Jacob Barrientos
相关产品推荐
相关产品推荐

