.join() 方法究竟做了什么?
我刚接触Python,对.join()
这个方法感到很困惑。我听说这是连接字符串的推荐方法。
我试了一下:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
结果得到了这样的东西:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
为什么会这样呢?难道595
不应该自动加上去吗?
9 个回答
61
要添加一个字符串,只需要用 +
符号把它连接起来。
比如:
>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world
join
是用来把字符串连接在一起的,它会在每个字符串之间加上一个分隔符。这个分隔符就是你放在 join
前面的东西。比如:
>>> "-".join([a,b])
'Hello, -world'
Join 需要一个字符串列表作为参数。
96
join
是一个需要传入可迭代对象的函数。通常这个可迭代对象是一个列表。你遇到的问题是,字符串本身也是可迭代的,它会一个一个地输出每个字符。你的代码实际上可以简化成这样:
"wlfgALGbXOahekxSs".join("595")
这和下面这个是一样的:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
所以就会生成你的字符串:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
字符串作为可迭代对象是Python初学者最容易困惑的问题之一。
316
仔细看看你的输出结果:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
我把你原始字符串中的“5”、“9”、“5”标记出来了。Python的join()
方法是一个字符串的方法,它需要一个列表来和字符串连接。下面是一个更简单的例子,可能会帮助你理解:
>>> ",".join(["a", "b", "c"])
'a,b,c'
在给定的列表中,每个元素之间会插入“,”。在你的例子中,你的“列表”是字符串“595”,它被当作列表["5", "9", "5"]来处理。
看起来你其实是想要+
而不是这个:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid