对于[2, 4, 3] 的输入,起始索引为:
- 0
- 0 + 2 = 2
- 0 + 2 + 4 = 6
您可以使用itertools.accumulate() 来收集起始索引。
一旦知道起始索引,我们只需通过zip() 将它们与每个起始索引分组的项目数配对,这已经是列表[2, 4, 3] 的内容。因此:
- 从 0 开始:计数 2
- 开始 2:计数 4
- 开始 6:计数 3
或者像 cmets 中提到的 @don'ttalkjustcode 一样,我们也可以跟踪累积的停止索引:
- 开始(2 - 2 = 0):停止 2
- 开始 (6 - 4 = 2) : 停止 6
- 开始(9 - 3 = 6):停止 9
from itertools import accumulate
s = ['Y', 'U', 'U', 'N', 'U', 'U', 'N', 'N', 'N']
for t in [
[2, 4, 3],
[5, 2, 2],
[1, 2, 6],
[6, 1, 2],
[2, 1, 4, 3],
[2, 1, 2, 2, 1, 1],
]:
# Option 1: Using start/count logic
z = [s[start:start+count] for start, count in zip(accumulate([0] + t), t)]
# Option 2: Using stop/count logic (thanks to @don'ttalkjustcode for pointing this out!)
# z = [s[stop-count:stop] for stop, count in zip(accumulate(t), t)]
print(z)
输出
[['Y', 'U'], ['U', 'N', 'U', 'U'], ['N', 'N', 'N']]
[['Y', 'U', 'U', 'N', 'U'], ['U', 'N'], ['N', 'N']]
[['Y'], ['U', 'U'], ['N', 'U', 'U', 'N', 'N', 'N']]
[['Y', 'U', 'U', 'N', 'U', 'U'], ['N'], ['N', 'N']]
[['Y', 'U'], ['U'], ['N', 'U', 'U', 'N'], ['N', 'N']]
[['Y', 'U'], ['U'], ['N', 'U'], ['U', 'N'], ['N'], ['N']]