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

Mat*_*ick 205 python string list

我是Python的新手,我完全感到困惑,.join()因为我已经阅读过它是连接字符串的首选方法.

我试过了:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)
Run Code Online (Sandbox Code Playgroud)

有类似的东西:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Run Code Online (Sandbox Code Playgroud)

它为什么这样工作?不应该595只是自动附加?

Gre*_*ill 299

仔细看看你的输出:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^
Run Code Online (Sandbox Code Playgroud)

我突出显示了原始字符串的"5","9","5".Python join()方法是一个字符串方法,它接受与字符串连接的事物列表.一个更简单的例子可能有助于解释:

>>> ",".join(["a", "b", "c"])
'a,b,c'
Run Code Online (Sandbox Code Playgroud)

在给定列表的每个元素之间插入",".在你的情况下,你的"列表"是串表示"595",这将被视为列表["5","9","5"].

看起来你正在寻找+:

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
Run Code Online (Sandbox Code Playgroud)

  • 一个原因是它给`join`提供了与`split`相反的有用属性(http://docs.python.org/library/stdtypes.html#str.split) (10认同)
  • OP可能会混淆`string.join`和`os.path.join`,这确实会连接路径 (9认同)
  • 如果您想要另一个分隔符,请在列表末尾添加一个空字符串.`','.join(['a','b','c',''])`给出"a,b,c" (4认同)

Ned*_*der 90

join将可迭代的东西作为参数.通常它是一个列表.在你的情况下,问题是字符串本身是可迭代的,依次给出每个字符.你的代码分解为:

"wlfgALGbXOahekxSs".join("595")
Run Code Online (Sandbox Code Playgroud)

其行为与此相同:

"wlfgALGbXOahekxSs".join(["5", "9", "5"])
Run Code Online (Sandbox Code Playgroud)

所以产生你的字符串:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Run Code Online (Sandbox Code Playgroud)

作为迭代的字符串是Python最令人困惑的开始问题之一.

  • upvote指出可能是混乱的关键:字符串是可迭代的,因此它们就像字符列表一样. (8认同)

Dan*_*erz 59

要附加字符串,只需将其与+符号连接即可.

例如

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world
Run Code Online (Sandbox Code Playgroud)

join用分隔符连接字符串.分隔符是您放置之前的位置join.例如

>>> "-".join([a,b])
'Hello, -world'
Run Code Online (Sandbox Code Playgroud)

Join将字符串列表作为参数.

  • 我们的社区应该提倡这种直接和简洁的答案.@担 (5认同)

Pēt*_*une 7

join()用于连接所有列表元素.对于连接两个字符串"+"会更有意义:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid
Run Code Online (Sandbox Code Playgroud)