Python best way to remove char from string by index
我要从字符串中删除一个字符,如下所示:
1 2 3 4 5 6 7
| S ="abcd"
Index=1 #index of string to remove
ListS = list(S)
ListS.pop(Index)
S ="".join(ListS)
print S
#"acd" |
我相信这不是最好的方法。
编辑我没有提到我需要操纵一个长度为10^7的字符串大小。所以关注效率是很重要的。
Can someone help me. Which pythonic way to do it?
- @很快请注意这个问题。它不是复制品。
- 重复,请看链接问题的第一个答案。
- 非常重复。所有的答案都是非常重复的(包括我自己的)。
- 投票决定重新打开,因为OP想要一个可行的解决方案来解决一系列10^7个元素-标记为重复的问题是"普通"字符串大小。
- @阿尔瓦罗-请修改你的问题,包括你的预期罢工大小。(或者一起问另一个问题)
使用切片可以绕过所有列表操作:
或者更一般地说
1
| S = S[:Index] + S[Index + 1:] |
您的问题(包括这样的问题)的许多答案可以在这里找到:如何使用python从字符串中删除字符?但是,这个问题名义上是关于按值删除,而不是按索引删除。
- 这是最有效的方法?看来不是Python。就像我想要的那样。
- 你为什么关心最有效的方法?字符串的大小是多少?从中删除字符的频率是多少?
- @ AlvaroJoao。从字符串中删除元素没有"有效"的方法。python中的字符串是不可变的。这意味着您将不得不创建临时容器和一个新的最终字符串,不管怎样。如果您想要高效,可以做一些类似扩展list和实现自定义__str__方法的事情。
- 字符串大小10^7。问题是找到回文并删除字符,直到字符串变成回文,所以我想我需要关心效率。
- @然后,AlvaroJoao保留一个字符列表而不是字符串,列表是可变的,不需要创建副本来更改。
- @ AlvaroJoao。考虑使用一个numpy数组来获得这个大小。如果您关心效率,首先不应该使用纯Python。
- @疯狂物理学家谢谢你的提示!!这对我有很大帮助。
- 下面是您可能想要查看的内容:stackoverflow.com/q/9476797/2988730。请注意,虽然数组的存储是不可变的,但您可以自由地向左移动元素或使用遮罩。对于10^7,我可能会选择后者。
- @是的!!好建议。我会按照这个提示来解决这个问题!谢谢!
- 每次修改列表大小时,都会在引擎盖下调用realloc。也要注意如何使用列表。
- @阿尔瓦罗约,不确定在列表或数组中保存字符串是否足以解决问题。10^7对于蛮力解决方案来说太长。不过,这取决于完整的问题陈述。
切片是我能想到的最好和最简单的方法,这里有一些其他的选择:
1 2 3 4 5 6 7 8 9 10 11 12 13
| >>> s = 'abcd'
>>> def remove(s, indx):
return ''.join(x for x in s if s.index(x) != indx)
>>> remove(s, 1)
'acd'
>>>
>>>
>>> def remove(s, indx):
return ''.join(filter(lambda x: s.index(x) != 1, s))
>>> remove(s, 1)
'acd' |
记住,索引是基于零的。
您可以用""替换索引字符。
1 2 3
| str ="ab1cd1ef"
Index = 3
print(str.replace(str[Index],"",1)) |
- 这不会像预期的那样对Index = 2起作用,因为它还将删除5的值。
- 如果在替换中添加1?将替换限制为一次。"疯狂物理学家"
- 修改了我的答案,现在index=2将被处理,请上传……谢谢。
- 好啊。如果我想替换Index = 5?我的观点是,在一般情况下,移除/替换为值永远不会是移除/替换为索引的安全替代方法,因此不能进行上票。
- @你说得对。刚才明白了。