如何根据排序整数列表切片?

0 python

让我说我有一个 string

s = 'ABCDEFGHIJKLMNOP'

和一个list排序integers

lst = [1, 4, 5, 9]

我怎样写一个函数来取integers,并slicestring相应的?

所需输出:

1)'A'[:1]

2) 'BCD' [1:4]

3) 'E' [4:5]

4) 'FGHI' [5:9]

5) 'JKLMNOP' [9:]
Run Code Online (Sandbox Code Playgroud)

dhk*_*hke 5

您可以slice()使用索引构造显式对象,然后使用这些切片索引字符串.

从那时起它归结为通常的"如何从序列中获得配对对象",而Python实际上没有内置的解决方案.

一个稍微邪恶,紧凑的解决方案,利用map()可以在锁定步骤中迭代多个序列的事实:

s = 'ABCDEFGHIJKLMNOP'
idx = [1, 4, 5, 9]
parts = [s[slc] for slc in map(slice, [0] + idx, idx + [None])]
Run Code Online (Sandbox Code Playgroud)

如果您有许多索引,请不要这样做,因为它会为索引动态构建两个中间列表.

显然,如果可以idx事先按摩,也可以

from itertools import imap
s = 'ABCDEFGHIJKLMNOP'
idx = [0, 1, 4, 5, 9, None]
parts = [s[slc] for slc in imap(slice, idx[:-1], idx[1:])]
Run Code Online (Sandbox Code Playgroud)

  • 或者,`[s [a:b]为a,b为zip([0] + idx,idx + [无])]` (3认同)