<分区>
给定一个任意字符串(即不基于模式),说:
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
我正在尝试根据索引列表对字符串进行分区。
这是我尝试过的,确实有效:
import string
def split_at_idx(txt, idx):
new_li=[None]*2*len(idx)
new_li[0::2]=idx
new_li[1::2]=[e for e in idx]
new_li=[0]+new_li+[len(txt)]
new_li=[new_li[i:i+2] for i in range(0,len(new_li),2)]
print(new_li)
return [txt[st:end] for st, end in new_li]
print(split_at_idx(string.ascii_letters, [3,10,12,40]))
# ['abc', 'defghij', 'kl', 'mnopqrstuvwxyzABCDEFGHIJKLMN', 'OPQRSTUVWXYZ']
拆分基于索引列表 [3,10,12,40]
。然后需要将该列表转换为开始、结束对列表,例如 [[0, 3], [3, 10], [10, 12], [12, 40], [40, 52]]
。我使用切片赋值来设置偶数和赔率,然后使用列表理解来分组成对,然后使用第二个 LC 来返回分区。
对于这样一个简单的函数来说,这似乎有点复杂。有没有更好/更有效/更惯用的方法来做到这一点?