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)))
打?。?/p>
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']]
添加回答
舉報