做了一道反转地址顺序的练习,最后一条代码输入 i=",".join(i) 和 ",".join(i) 出来的结果是不同的,大神能帮忙看一下吗?
i=input("请从大到小输入地址,中间用空格隔开:")
i=i.split(" ")
i.reverse()
i=",".join(i)
print(i)
得出
请从大到小输入地址,中间用空格隔开:福建省 厦门市 鼓浪屿
鼓浪屿,厦门市,福建省
使用 ",".join(i)
i=input("请从大到小输入地址,中间用空格隔开:")
i=i.split(" ")
i.reverse()
",".join(i)
print(i)
得出的是
请从大到小输入地址,中间用空格隔开:福建省 厦门市 鼓浪屿
['鼓浪屿', '厦门市', '福建省']
为什么加了一个赋值,得出来的答案是不同的呢?
i.reverse()
到这一句,i反转后,是一个序列/数组。
",".join(i)
这一句是将i中的元素,以,为连接符,生成一个新的字符串。注意 i 本身并没有变化
",".join(i)
print(i)
所以很明显,这里i仍然是一个数组,输出的形式为 ['','',''....]
i=",".join(i)
print(i)
而",".join(i)
的结果是一个字符串,将其赋值给i后,i现在就变成了一个字符串,即x,x,x,x
题外话,这就是python太过于自由了,如果是java这种强类型的语言,编译直接出错了。。 ;D
楼上解释也很清楚
i=",".join(i)
相当于创建了一个值是“,”.join(i) 的对象,把这个值赋给了i,
所以你print(i)的时候,是你期望的结果
直接",".join(i),也是创建了一个新的字符串对象,但你并没有赋值给i,
i还是原来的值,也就是没有join操作不会对参数i生效
所以print的是reserve的结果
简而言之就是你第一次打印的是",".join(i)
的结果,而第二次打印的是i.reverse()
的结果.
虽然第二次进行了",".join(i)
操作,但是没有赋值给i
,所以i
并没有变化,打印出来的也就是i.reverse()
的结果.