我需要一种方法将一个有空格的字符串中所有空格的位置复制到另一个没有空格的字符串中。
例如:
string1 = "This is a piece of text"
string2 = "ESTDTDLATPNPZQEPIE"
output = "ESTD TD L ATPNP ZQ EPIE"
我需要一种方法将一个有空格的字符串中所有空格的位置复制到另一个没有空格的字符串中。
例如:
string1 = "This is a piece of text"
string2 = "ESTDTDLATPNPZQEPIE"
output = "ESTD TD L ATPNP ZQ EPIE"
str.join
函数之后,将字符插入到占位符列表中并进行连接。it = iter(string2)
output = ''.join(
[next(it) if not c.isspace() else ' ' for c in string1]
)
print(output)
'ESTD TD L ATPNP ZQ EPIE'
这种方法很高效,因为它避免了重复的字符串拼接。
enumerate()
迭代string1
中的索引和字符。
在每次迭代时,如果字符是空格,请将一个空格添加到输出字符串(请注意,这是低效的,因为您正在创建新对象,而字符串是不可变的),否则将string2
中该索引处的字符添加到输出字符串中。
所以代码看起来像:
output = ''
si = 0
for i, c in enumerate(string1):
if c == ' ':
si += 1
output += ' '
else:
output += string2[i - si]
str.join
方法。这可以避免向输出字符串进行缓慢的连接操作。def chars(s1, s2):
si = 0
for i, c in enumerate(s1):
if c == ' ':
si += 1
yield ' '
else:
yield s2[i - si]
output = ''.join(char(string1, string2))
string1 = "This is a piece of text"
string2 = "ESTDTDLATPNPZQEPIE"
string3=list(string2)
for j,i in enumerate(string1):
if i==' ':
string3.insert(j,' ')
print("".join(string3))
输出:
ESTD TD L ATPNP ZQ EPIE
.isspace()
?虽然非常聪明 :) - Joe Iddonc == ' '
更加简洁,谢谢。我喜欢你的生成器解决方案,这也是我自己想到的第一件事情。 - cs95list()
会更快吗? - Joe Iddonstr.join
调用节省时间,但你已经失去了通过创建生成器而节省的所有时间。尽管我确实同意它更快了,但现在我已经检查过了;这只是关闭生成器的开销吗? - Joe Iddon