在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()
的类似方法?
答案 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连接您提供的列表中的所有标记,由您“应用”它的任何字符串分隔。它实际上并不附加到字符串。