字符串和附加在Python中

时间:2013-05-24 09:29:08

标签: python string append

在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

我预计输出应该是“狐狸已经跳入河中”,但输出“r” 为什么呢?

是否有类似string.append()的类似方法?

4 个答案:

答案 0 :(得分:4)

>>> a = "pp"
>>> b = "kk"
>>> a += b
>>> a
'ppkk'

答案 1 :(得分: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()不是

答案 2 :(得分:3)

>>> '-'.join('a')
'a'

str.join不起作用。这就是为什么"r"是输出的原因,因为在for循环结束时你设置了tmp = tmp.join('r'),这只会导致"r"

通常使用str.join

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

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

您需要简单的字符串连接

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

或使用列表''.join代表efficient string concatenation(由于字符串的不可变性,前一种解决方案是O(N ^ 2))

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

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

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

答案 3 :(得分:1)

这将做你想要的我想:

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

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