Python:从字符串中删除选定的空白

Python:从字符串中删除选定的空白,python,Python,我想删除字符串中的一些选定空白。 假设我有一个要删除的空白索引: w_index = [1,3] 和一个字符串: str = 'a b c d' 我需要的是删除第一个和第三个空格,这样最终的结果是: str = 'ab cd' 多谢各位 在python中不能更改字符串。您需要做的是创建一个新字符串并连接子字符串。在索引数组上循环并创建一个子字符串,从开始到第一个索引(独占),从第一个+1到第二个,依此类推。最后将字符串组合起来。在python中不能更改字符串。您需要做的是创建一个新字符串

我想删除字符串中的一些选定空白。 假设我有一个要删除的空白索引:

w_index = [1,3]
和一个字符串:

str = 'a b c d'
我需要的是删除第一个和第三个空格,这样最终的结果是:

str = 'ab cd' 

多谢各位

在python中不能更改字符串。您需要做的是创建一个新字符串并连接子字符串。在索引数组上循环并创建一个子字符串,从开始到第一个索引(独占),从第一个+1到第二个,依此类推。最后将字符串组合起来。

在python中不能更改字符串。您需要做的是创建一个新字符串并连接子字符串。在索引数组上循环并创建一个子字符串,从开始到第一个索引(独占),从第一个+1到第二个,依此类推。最后,您组合字符串。

Python索引从零开始,因此我调整了您的w_索引列表

# Input
w_index = [1,3]
str = 'a b c d'

# Solution
space_pos = [p for p in range(len(str)) if str[p]==' ']
w_pos = [space_pos[x-1] for x in w_index]
''.join(str[x+1:y] for x,y in zip([-1]+w_pos, w_pos+[len(str)]))

# result: 'ab cd'
w_index = [0,2]
另外,
str
是Python中的一个特殊名称,因此我重命名了字符串变量

string = 'a b c d'
现在创建一个新列表
wpos
,该列表给出
字符串中每个空格的位置

wpos = [i for (i, char) in enumerate(str) if char == ' ']

print "wpos:", wpos
输出:

>> wpos: [1, 3, 5]
然后我们可以反向遍历w_索引,并根据其位置删除空白。我们不能像创建列表那样
pop()
创建字符串,所以将字符串一分为二,然后将其组合在一起,生成一个新字符串

for i in w_index[::-1]:
    pos = wpos[i]
    string = string[:pos] + string[(pos+1):]
print string
输出:

>> ab cd

Python索引从零开始,所以我调整了您的w_索引列表

w_index = [0,2]
另外,
str
是Python中的一个特殊名称,因此我重命名了字符串变量

string = 'a b c d'
现在创建一个新列表
wpos
,该列表给出
字符串中每个空格的位置

wpos = [i for (i, char) in enumerate(str) if char == ' ']

print "wpos:", wpos
输出:

>> wpos: [1, 3, 5]
然后我们可以反向遍历w_索引,并根据其位置删除空白。我们不能像创建列表那样
pop()
创建字符串,所以将字符串一分为二,然后将其组合在一起,生成一个新字符串

for i in w_index[::-1]:
    pos = wpos[i]
    string = string[:pos] + string[(pos+1):]
print string
输出:

>> ab cd

记住:字符串在python中是不可变的。记住:字符串在python中是不可变的。注意:这个解决方案比我的解决方案慢得多,特别是对于大字符串。我的脚本需要0.47秒才能从1000000个字符的字符串中删除250000个空格,而您的脚本需要101秒才能完成相同的任务。速度慢了200多倍!这是因为您的脚本在一个循环中创建两个大字符串,这是不必要的。是的,它当然较慢。如果要处理较大的字符串,则方法会更快。我的答案对于初学者来说更容易理解,通过中间步骤来解释发生了什么。注意:这个解决方案比我的解决方案慢得多,特别是对于大字符串。我的脚本需要0.47秒才能从1000000个字符的字符串中删除250000个空格,而您的脚本需要101秒才能完成相同的任务。速度慢了200多倍!这是因为您的脚本在一个循环中创建两个大字符串,这是不必要的。是的,它当然较慢。如果要处理较大的字符串,则方法会更快。对于初学者来说,我的答案更容易理解,可以通过中间步骤来解释正在发生的事情。