解释Python .join()

我很新的Python和完全困惑.join() ,我已经阅读是连接string的首选方法。

我尝试:

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

并得到像这样的东西:

 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5 

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

仔细看看你的输出:

 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5 ^ ^ ^ 

我已经突出了你的原始string的“5”,“9”,“5”。 Python join()方法是一个string方法,它接受一个列表来joinstring。 一个更简单的例子可能有助于解释:

 >>> ",".join(["a", "b", "c"]) 'a,b,c' 

在给定列表的每个元素之间插入“,”。 在你的情况下,你的“列表”是string表示“595”,它被视为列表[“5”,“9”,“5”]。

看来你正在寻找+而不是:

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

join以可迭代的事物为参数。 通常这是一个列表。 在你的情况下,问题是一个string本身是可迭代的,依次给出每个字符。 你的代码分解为:

 "wlfgALGbXOahekxSs".join("595") 

其作用与此相同:

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

所以会产生你的string:

 "5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5" 

作为迭代的string是Python最令人困惑的开始问题之一。

要附加一个string,只需将它与+号连接即可。

例如

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

连接使用分隔符连接string。 分隔符是你在join之前的地方。 例如

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

Join将string列表作为参数。

join()用于连接所有列表元素。 连接两个string“+”会更有意义:

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

如果你想用join来简单地连接你的两个string,你可以这样做:

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