Python:通过索引删除子字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:通过索引删除子字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2950字,纯文字阅读大概需要5分钟。
内容图文
![Python:通过索引删除子字符串](/upload/InfoBanner/zyjiaocheng/780/37f6f5fd58d1475085266153f52d19bf.jpg)
我有以下相当简单的片段:
def delete_substring_blocks(s, blocks):
'''
s: original input string
blocks: list of indices (start, end) to be deleted
return string `out` where blocks are deleted from s
'''
out = ''
p = 0
for start, end in blocks:
out += s[p:start]
p = end
out += s[p:]
return out
此函数接受一个字符串s并从s中删除所有s [start:end],其中索引(start,end)对在列表块中给出.
是否有某个内置函数可以执行相同的操作?
更新:
我的代码中有一个假设:
>块按第一个索引按升序排序(由list.sort()就地完成)
至于块是否可以重叠,在我的用例中我确保它们在调用函数之前没有.但为了好玩,我们也可以假设他们这样做.
解决方法:
我的方法将块转换为一组索引,我称之为排除.之后,循环遍历字符串并排除索引在排除集中的那些字符.我使用set而不是list,因为它很好地处理重复项(如果重叠范围).
构建排除集
给定一个无序的,可能重叠的范围列表:
blocks = [(5, 7), (2, 4), (6, 10)]
我想将其转换为:
exclude = {2, 3, 5, 6, 7, 8, 9}
怎么样:
exclude = set()
for block in blocks:
exclude.update(range(*block))
把它们放在一起
这是我的代码和最后的一个小例子.请注意,我选择重命名该函数,因为此函数足够通用,可以处理字符串,列表,元组和其他可迭代对象,而不仅仅是字符串.另外,因为函数返回一个列表,所以在处理字符串时,我们需要将字符列表重新加入.
def delete_blocks(iterable, blocks):
exclude = set()
for block in blocks:
exclude.update(range(*block))
return [cell for i, cell in enumerate(iterable) if i not in exclude]
# Try it out
test_string = '0123456789abc'
blocks = [(5, 7), (2, 4), (6, 10)]
result = ''.join(delete_blocks(test_string, blocks))
print('Before: {!r}'.format(test_string))
print('Blocks:', blocks)
print('After: {!r}'.format(result))
更新:实现delete_substring_blocks
为了真正回答Mai的问题,我使用delete_blocks实现了delete_substring_blocks:
def delete_substring_blocks(s, blocks):
return ''.join(delete_blocks(s, blocks))
内容总结
以上是互联网集市为您收集整理的Python:通过索引删除子字符串全部内容,希望文章能够帮你解决Python:通过索引删除子字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。