Python中join函数使用问题:字符串拼接结果与预期不符
为什么Python的join()函数拼接结果不符合预期?
兄弟,你这问题完全是把join()的用法搞反啦!先给你掰扯清楚join()到底是干啥的——它的语法是分隔符字符串.join(可迭代对象),作用是用前面的分隔符,把可迭代对象里的所有元素拼接成一个新字符串。比如"-".join(["a","b","c"])会得到"a-b-c",而"".join(["a","b"])才会得到"ab"。
咱们一步步看你的代码执行过程,就明白为啥结果不对了:
初始str2="",letters="abc":
- 第一次循环(letter="a"):
- 先打印
str2,输出'' - 执行
str2 = str2.join(letter)——这里str2是空串,letter是单个字符"a"(字符串本身是可迭代对象,"a"的迭代元素就是["a"])。因为可迭代对象只有一个元素,分隔符(空串)根本没地方用,所以结果就是"a",打印输出"a"
- 先打印
- 第二次循环(letter="b"):
- 打印当前
str2,输出"a" - 执行
str2 = str2.join(letter)——现在str2是"a",letter是"b"(迭代元素是["b"])。同样,只有一个元素,分隔符"a"用不上,直接返回"b",打印输出"b"
- 打印当前
- 第三次循环(letter="c"):
- 打印当前
str2,输出"b" - 执行
str2 = str2.join(letter)——还是只有一个元素"c",返回"c",打印输出"c"
- 打印当前
所以最终输出就是你看到的''、a、a、b、b、c,完全符合join()的逻辑,但和你想要的累加效果完全不是一回事。
而+运算符是直接做字符串拼接,str2 += letter相当于把letter直接追加到str2末尾,这才是你直觉里的“累加”逻辑,所以结果符合预期。
如果非要用join()实现你要的效果,正确的做法是先把要拼接的字符收集到列表里,再用join()批量拼接(这也是join()的正确使用场景,比循环用+效率更高):
str_list = [] letters = "abc" for letter in letters: print(''.join(str_list)) str_list.append(letter) print(''.join(str_list))
这段代码的输出就是你期望的''、a、a、ab、ab、abc。
简单总结下:
join()是用分隔符连接多个元素,不是用来追加单个字符的+是直接字符串拼接,适合少量元素的累加,但批量拼接时推荐用join()+列表的组合
内容的提问来源于stack exchange,提问作者Ankush
相关产品推荐
相关产品推荐

