gpt4 book ai didi

python - 在倒数第二次迭代中停止生成器的 for 循环

转载 作者:行者123 更新时间:2023-12-01 06:57:17 24 4
gpt4 key购买 nike

我有生成器 cut_slices 并使用for 循环。但我需要对循环外的第一个和最后产生元素进行一些特定的工作。首先很简单,只需在循环之前使用 next() 即可。但是最后呢?

<小时/>
fu_a = self.cut_slices(unit, unit_size) #generator (simple for loop with some calculations and yield)

header = self.make_header(p=0, first_byte=unit[0], rtp_type=rtp_type, flag='s')
self.send_packet(header + next(fu_a))

for i in fu_a: #if there is an analogue of a[:-1] for generator object?
header = self.make_header(p=0, first_byte=unit[0], rtp_type=rtp_type,
flag='m')
self.send_packet(header + i)

header = self.make_header(p=0, first_byte=unit[0], rtp_type=rtp_type, flag='e')
self.send_packet(header + next(fu_a))

附注我知道还有其他方法可以达到相同的结果,只是想弄清楚。

最佳答案

在下面的代码中,在 for 循环中的 aa 上运行您想要的函数,并忽略最后一个函数调用。循环结束后,您的变量将为 aa

In [1]: a = (i for i in range(10))
In [2]: first = next(a)
In [3]: first
Out[3]: 0
In [4]: for aa in a:
...: print(aa)
...:
1
2
3
4
5
6
7
8
9
In [5]: aa
Out[5]: 9

在阅读了一篇有关类似主题的中等文章后,我找到了一种更好的方法来获取最后一个值:

In [29]: def get_last_val(A):
...: v = next(A)
...: for a in A:
...: yield False, v
...: v = a
...: yield True, v

In [30]: a = (i for i in range(10))

In [31]: a = get_last_val(a)

In [32]: for aa in a:
...: print(aa)
...:
(False, 0)
(False, 1)
(False, 2)
(False, 3)
(False, 4)
(False, 5)
(False, 6)
(False, 7)
(False, 8)
(True, 9)

如果第一个返回值为 True,则这将是迭代中的最后一个值。

关于python - 在倒数第二次迭代中停止生成器的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58756131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com