Python中的字符串和追加
在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” 为
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)