.join() 方法究竟做了什么?

220 投票
9 回答
589963 浏览
提问于 2025-04-15 16:51

我刚接触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

撰写回答