根据列表值定期迭代列表

我一直在尝试以几种不同的方式来实现这一目标,但似乎不太适合我。我正在尝试迭代块中的列表,其中第一个索引值是第一个块中有多少元素的整数。之后,另一个具有 n 个元素的整数,以及另一个,依此类推。

例子:

test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']

我想读取 3,从列表中取出“a”、“b”、“c”并对它们执行一些操作。然后返回到 2 处的列表,拉出 'd'、'e' - 更多操作等。或者甚至只使用整数拆分为子列表也可以。

我正在考虑使用更新的 [start:stop:step] 变量进行列表切片,但无法将其组合在一起。

有什么建议么?只能使用标准Python库。


MM们
浏览 135回答 3
3回答

HUH函数

在列表上使用迭代器使这变得非常简单。只需抓取下一个项目,它会告诉您接下来还要抓取多少,依此类推,直到列表末尾: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, cd, ef, g, h如果需要保存结果,您还可以将其转换为列表:>>> it = iter(test)>>> [[next(it) for _ in range(num)] for num in it][['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]

红糖糍粑

您可以创建一个生成器来延迟迭代列表的各个部分:test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']def parts(lst):&nbsp; &nbsp; idx = 0&nbsp; &nbsp; while idx < len(lst):&nbsp; &nbsp; &nbsp; &nbsp; part_length = lst[idx]&nbsp; &nbsp; &nbsp; &nbsp; yield lst[idx+1: idx + part_length + 1 ]&nbsp; &nbsp; &nbsp; &nbsp; idx += part_length+1&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for part in parts(test):&nbsp; &nbsp; print(part)输出:['a', 'b', 'c']['d', 'e']['f', 'g', 'h']

哔哔one

如果您的输入结构总是这样,您可以执行以下操作: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']]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python