0

在 Python 中,字符串是不可变的。我发现该函数string.join()可以将值添加到字符串中,但似乎以下内容不起作用。

#coding: utf-8
if __name__ == "__main__":
    str = "A fox has jumped into the river"
    tmp = ""
    for i in str:
        tmp = tmp.join(i)
    print tmp

我希望输出应该是“A fox has jumped into the river”,但它输出的是“r”,为什么?

有没有类似的方法string.append()

4

4 回答 4

4
>>> a = "pp"
>>> b = "kk"
>>> a += b
>>> a
'ppkk'
于 2013-05-24T09:32:56.610 回答
3

您可以通过使用简单地追加+

tmp = tmp + i

可以与就地添加分配相结合:

tmp += i

但这并不像加入整个序列那样有效''.join()

str = "A fox has jumped into the river"
tmp = ''.join(str)

后者当然是毫无意义的,因为我们只是将 的所有单个字符str重新加入到一个新的、否则相等的字符串中。但它比在循环中调用要高效得多因为只需创建一个新字符串一次,而循环为每个连接创建新字符串。+.join()+

当您使用分隔符时,它会变得更有趣:

>>> ' - '.join(str)
'A -   - f - o - x -   - h - a - s -   - j - u - m - p - e - d -   - i - n - t - o -   - t - h - e -   - r - i - v - e - r'

这里要注意的是,您调用.join()的是分隔符字符串,而不是您要加入的序列!

于 2013-05-24T09:36:39.147 回答
3
>>> '-'.join('a')
'a'

str.join不能那样工作。这就是输出的原因"r",因为在 for 循环结束时,您设置tmp = tmp.join('r')whichc 只会导致"r".

str.join通常是这样使用的:

>>> '-'.join('abc')
'a-b-c'

或者

>>> ', '.join(['foo', 'bar', 'spam'])
'foo, bar, spam'

你想要简单的字符串连接

tmp = ""
for i in str:
    tmp += i

或使用列表并''.join进行有效的字符串连接(由于字符串的不可变性质,前一种解决方案是 O(N^2))

tmp = []
for i in str:
    tmp.append(i)
tmp = ''.join(tmp)

''.join将列表连接成一个字符串,以空字符串作为分隔符)

最后一点:不要str用作变量名,它是内置的。

于 2013-05-24T09:36:59.663 回答
1

这将做你想要的我认为:

if __name__ == "__main__":
    str = "A fox has jumped into the river"
    tmp = ""
    for i in str:
        tmp += i
    print (tmp)

您编码不起作用的原因是 join 加入了您提供的列表中的所有标记,并由您“应用”它的任何字符串分隔。它实际上并不附加到字符串。

于 2013-05-24T09:34:33.060 回答