Python中str.join()方法使用困惑:三种写法输出为何不同?
三种str.join()写法输出不一致的原因
我用三种方式使用Python的str.join()拼接字符串,在3.10.6版本中得到了完全不同的输出,具体代码和运行结果如下,下面逐个分析差异的根源。
测试代码
# 第一种写法 sampleString = 'Fred','you need a nap! (your mother)' ss1 = ' - '.join(sampleString) print(ss1), print() # 第二种写法 sampleString = input('please enter something: ') # 输入内容:'Fred','you need a nap! (your mother)' ss2 = ' - '.join(sampleString) print(ss2) # 第三种写法 sampleString = input(['Fred','you need a nap! (your mother)']) ss2 = ' - '.join(sampleString) print(ss2)
运行输出
Fred - you need a nap! (your mother) please enter something: 'Fred','you need a nap! (your mother)' ' - F - r - e - d - ' - , - ' - y - o - u - - n - e - e - d - - a - - n - a - p - ! - - ( - y - o - u - r - - m - o - t - h - e - r - ) - ' ['Fred', 'you need a nap! (your mother)']
1. 第一种写法:正确的序列拼接
- 代码里
sampleString = 'Fred','you need a nap! (your mother)'是Python的元组隐式赋值——用逗号分隔多个值时,Python会自动把它们打包成元组,所以sampleString实际是('Fred','you need a nap! (your mother)'),一个包含两个字符串元素的序列。 str.join()的核心作用是:接收一个由字符串组成的可迭代对象,把每个元素用指定分隔符连接起来。这里完全符合方法的要求,所以输出就是两个字符串用-拼接的预期结果。
2. 第二种写法:把单个字符串当成字符序列处理
input()函数的返回值是用户输入的完整字符串——不管你输入的内容看起来像不像元组/列表,它都会原封不动地作为一个单一字符串返回。这里用户输入的'Fred','you need a nap! (your mother)'被存成了一个长字符串,而非包含两个元素的序列。- 当对单个字符串调用
join()时,Python会把字符串视为单个字符组成的可迭代对象,逐个遍历每一个字符,在字符之间插入-,最终就得到了那种每个字符都被分隔的怪异输出。
3. 第三种写法:错误使用input()的提示参数
input()函数的参数是提示信息,要求必须是字符串类型。如果传入列表,Python会自动调用str()把列表转换成字符串(即"['Fred', 'you need a nap! (your mother)']"),然后先打印这个字符串作为输入提示。- 之后
input()会等待用户输入内容,如果你直接按回车,sampleString就是空字符串。对空字符串调用join()会返回空字符串,所以最后print(ss2)会输出空行,你看到的输出其实只是input()打印的提示信息。
内容的提问来源于stack exchange,提问作者gerald
相关产品推荐
相关产品推荐

