3 回答
TA贡献1836条经验 获得超4个赞
在列表上使用迭代器使这变得非常简单。只需抓取下一个项目,它会告诉您接下来还要抓取多少,依此类推,直到列表末尾:
test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']
it = iter(test)
for num in it:
print(", ".join(next(it) for _ in range(num)))
打印:
a, b, c
d, e
f, g, h
如果需要保存结果,您还可以将其转换为列表:
>>> it = iter(test)
>>> [[next(it) for _ in range(num)] for num in it]
[['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]
TA贡献1815条经验 获得超6个赞
您可以创建一个生成器来延迟迭代列表的各个部分:
test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']
def parts(lst):
idx = 0
while idx < len(lst):
part_length = lst[idx]
yield lst[idx+1: idx + part_length + 1 ]
idx += part_length+1
for part in parts(test):
print(part)
输出:
['a', 'b', 'c']
['d', 'e']
['f', 'g', 'h']
TA贡献1854条经验 获得超8个赞
如果您的输入结构总是这样,您可以执行以下操作:
result = [test[i:i+j] for i, j in enumerate(test, 1) if isinstance(j, int)]
print(result)
# [['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]
添加回答
举报