Python中的字符串和追加

Python中的字符串和追加,python,string,append,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” 为

在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()

这将满足您的需要我认为:

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

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

只需使用
+
即可附加:

tmp = tmp + i
可与就地附加分配相结合:

tmp += i
但这远不如用
''连接整个序列有效。join()

后者当然是毫无意义的,因为我们只是将
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()
,而不是在要加入的序列上

>>> '-'.join('a')
'a'
str.join
不是这样工作的。这就是为什么输出是
“r”
,因为在for循环的末尾,您设置了
tmp=tmp.join('r')
,这将导致
“r”

这就是通常使用的
str.join

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

您需要简单的字符串连接

tmp = ""
for i in str:
    tmp += i
或者使用一个列表和
“”。join
for(由于字符串的不可变性质,前一个解决方案是O(N^2)

'.join
将列表合并为一个字符串,并使用空字符串作为分隔符)


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

您得到这个结果是因为遍历字符串会使您的
i
-位于该字符串中的每个符号上。所以当循环到最后一次迭代时-
i
成为字符串的最后一个符号-
'r'
join()
是字符串对象的方法,它将序列元素作为参数连接起来,并由该方法所绑定的对象分隔。在您的例子中,使用分隔符将序列(字符串)与一个元素
'r'
连接起来,然后得到结果-
'r'
。连接字符串的最快方法是
''。连接([str1,str2])
还有其他问题吗?我不知道你为什么不接受正确的答案。如果你有更多的问题,离开这里,哈哈。@python先生?你在吗?
>>> '-'.join('abc')
'a-b-c'
>>> ', '.join(['foo', 'bar', 'spam'])
'foo, bar, spam'
tmp = ""
for i in str:
    tmp += i
tmp = []
for i in str:
    tmp.append(i)
tmp = ''.join(tmp)