gpt4 book ai didi

带有列表的python字符串切片

转载 作者:太空狗 更新时间:2023-10-30 01:49:30 24 4
gpt4 key购买 nike

这是我的 list :

liPos = [(2,5),(8,9),(18,22)]

每个元组的第一项是起始位置,第二项是结束位置。然后我有一个这样的字符串:

s = "I hope that I will find an answer to my question!"

现在,考虑到我的 liPos 列表,我想通过删除元组中提供的每个开始和结束位置之间的字符(包括周围的数字)来格式化字符串。这是我想要的结果:

"I tt I will an answer to my question!"

所以基本上,我想删除 2 和 5(包括 2 和 5)之间的字符,然后是 8,9(包括 8 和 9)之间的字符,最后是 18,22(包括 18 和 22)之间的字符。

有什么建议吗?

最佳答案

这假定 liPos 已经排序,如果它没有在 for 循环中使用 sorted(liPos, reverse=True)

liPos = [(2,5),(8,9),(18,22)]
s = "I hope that I will find an answer to my question!"
for begin, end in reversed(liPos):
s = s[:begin] + s[end+1:]

print s

这是另一种方法,它构造一个新的要包含的切片元组列表,然后仅将字符串与那些包含的部分连接起来。

from itertools import chain, izip_longest
# second slice index needs to be increased by one, do that when creating liPos
liPos = [(a, b+1) for a, b in liPos]
result = "".join(s[b:e] for b, e in izip_longest(*[iter(chain([0], *liPos))]*2))

为了更容易理解,下面是 izip_longest 生成的切片:

>>> list(izip_longest(*[iter(chain([0], *liPos))]*2))
[(0, 2), (6, 8), (10, 18), (23, None)]

关于带有列表的python字符串切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7018812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com