Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从发电机中产生每个备用元件?_Python - Fatal编程技术网

Python 如何从发电机中产生每个备用元件?

Python 如何从发电机中产生每个备用元件?,python,Python,如何从生成器生成每个备用元素 显而易见的方法似乎不起作用: >>> generator[::2] TypeError: 'generator' object is not subscriptable 确保您可以编写实现相同目的的代码: x = 0 for item in generator: if x % 2 == 0: do_something(item) x += 1 但是Python在像这样的紧循环中的数学能力很差,我很想知道如何才能做

如何从生成器生成每个备用元素

显而易见的方法似乎不起作用:

>>> generator[::2]
TypeError: 'generator' object is not subscriptable
确保您可以编写实现相同目的的代码:

x = 0
for item in generator:
    if x % 2 == 0:
        do_something(item)
    x += 1
但是Python在像这样的紧循环中的数学能力很差,我很想知道如何才能做得更好。

您可以使用它来让第二个选项更简洁:

for i, item in enumerate(generator):
    if i % 2 == 0:
        do_something(item)

这种方法只能用于提供符合任何类型重复索引模式的值:

def yield_every_other(g):
    from itertools import compress, cycle
    return compress(g, cycle([True, False]))
然后,例如

>>> for x in yield_every_other(2*i for i in range(20)):
...     print(x)
显示

0
4
8
12
16
20
24
28
32
36

Python在紧循环中的数学能力很差
-你能解释一下吗
可以做得更好。
-如何更好?请看。例如,您可以执行
islice(,0,None,2)
。当您编写自己的生成器时,您可以完全控制生成哪些值,因此我不知道您在这里面临的问题是什么。强烈建议
islice
,但您也可以在循环中使用生成器中的一个元素,如:
\uu=next(生成器)
@PranavHosangadi您无需费心分配返回值<代码>为真时:下一步(生成器);生成下一个(生成器)。