为了账号安全,请及时绑定邮箱和手机立即绑定

根据列表值定期迭代列表

根据列表值定期迭代列表

MM们 2023-10-11 20:13:55
我一直在尝试以几种不同的方式来实现这一目标,但似乎不太适合我。我正在尝试迭代块中的列表,其中第一个索引值是第一个块中有多少元素的整数。之后,另一个具有 n 个元素的整数,以及另一个,依此类推。例子:test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']我想读取 3,从列表中取出“a”、“b”、“c”并对它们执行一些操作。然后返回到 2 处的列表,拉出 'd'、'e' - 更多操作等。或者甚至只使用整数拆分为子列表也可以。我正在考虑使用更新的 [start:stop:step] 变量进行列表切片,但无法将其组合在一起。有什么建议么?只能使用标准Python库。
查看完整描述

3 回答

?
HUH函数

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']]


查看完整回答
反对 回复 2023-10-11
?
红糖糍粑

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']


查看完整回答
反对 回复 2023-10-11
?
哔哔one

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']]


查看完整回答
反对 回复 2023-10-11
  • 3 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信