.join()方法到底做什么?


209

我对Python来说还很陌生,并且完全不.join()理解所读内容是连接字符串的首选方法。

我试过了:

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

并得到类似:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

为什么会这样工作?难道不595应该自动附加正义吗?


1
我认为您在程序运行时轻按了Yubikey
Trenton

Answers:


303

仔细查看您的输出:

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

1
为什么不是:5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs?将字符串附加到最后一个元素?
马特·麦考密克

10
原因之一是这提供joinsplitdocs.python.org/library/stdtypes.html#str.split)的倒数的有用属性
cobbal

4
如果需要另一个定界符,请在列表末尾添加一个空字符串。','.join(['a', 'b', 'c', ''])给出“ a,b,c”
tgray,

9
OP可能确实混淆string.joinos.path.join路径的连接
Juan Campa 2014年

91

join以一个可迭代的东西作为参数。通常是列表。您遇到的问题是字符串本身是可迭代的,从而依次给出每个字符。您的代码分解为:

"wlfgALGbXOahekxSs".join("595")

其作用与此相同:

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

这样就产生了你的字符串:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

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


8
指出可能造成混乱的症结所在:字符串是可迭代的,因此它们就像字符列表一样。
丹尼尔·贝尔德

59

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

例如

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

join将字符串与分隔符连接在一起。分隔符是您在之前放置的内容join。例如

>>> "-".join([a,b])
'Hello, -world'

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


5
我们的社会应该提倡这种直接而简洁的答案。@Dan
DehengYe 2015年

7

join()用于连接所有列表元素。仅连接两个字符串“ +”将更有意义:

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

4

为了进一步说明别人在说什么,如果您想使用join简单地连接两个字符串,则可以执行以下操作:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])

2

很好的解释了为什么在这里+串联大量字符串的开销很大

加号运算符是连接两个 Python字符串的完美解决方案。但是,如果您继续添加两个以上的字符串(n> 25),则可能需要考虑其他问题。

''.join([a, b, c]) 技巧是性能优化。


0

在提供此作为输入时,

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

Python将其作为输出返回:

'server=mpilgrim;uid=sa;database=master;pwd=secret'

0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

如果这是输入,则可以使用JOIN方法添加单词之间的距离,并将列表转换为字符串。

这是Python的输出

'my name is kourosh'

0

“” .join可用于将列表中的字符串复制到变量

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.