Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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_Generator - Fatal编程技术网

如何使用python编写自定义生成器函数

如何使用python编写自定义生成器函数,python,generator,Python,Generator,我有这个 for A in [0, -0.25, 0.25, -0.5, 0.5, -0.75, 0.75, -1.0, 1.0, -1.25, 1.25, -1.5, 1.5, -1.75, 1.75, -2.0, 2.0, -2.25, 2.25, -2.5, 2.5, -2.75, 2.75, -3.0, 3.0, -3.25, 3.25, -3.5, 3.5, -3.75, 3.75, -4.0, 4.0, -4.25, 4.25, -4.5, 4.5, -4.75, 4.75, -5.

我有这个

for A in [0, -0.25, 0.25, -0.5, 0.5, -0.75, 0.75, -1.0, 1.0, -1.25, 1.25, -1.5, 1.5, -1.75, 1.75, -2.0, 2.0, -2.25, 2.25, -2.5, 2.5, -2.75, 2.75, -3.0, 3.0, -3.25, 3.25, -3.5, 3.5, -3.75, 3.75, -4.0, 4.0, -4.25, 4.25, -4.5, 4.5, -4.75, 4.75, -5.0, 5.0]:
是否可以使其具有发电机功能?我现在有:

def frange(start, stop, step=1.0):
    while start <= stop:
        yield start
        start += step
但是它返回的是
[-2.5,2.25,…,0,2.25,2.5]
,对于我的程序来说,它很难计算。因为我发现这个值接近于零,但我不知道它能有多少组合

我需要从零开始,下一个值必须是正负值。
[0,-0.25,0.25…]

您可以使用
numpy.arange()
函数,然后按绝对值对值进行排序:

answer = sorted(np.arange(-5, 5.25, 0.25), key=abs)
print(answer)
输出

[0.0,
 -0.25,
 0.25,
 -0.5,
 0.5,
 ...,
 -4.5,
 4.5,
 -4.75,
 4.75,
 -5.0,
 5.0]

也许你指的是发电机而不是lambda:

def opposing_numbers(increment, maximum):
     yield 0
     value = increment
     while value <= maximum:
         yield -value
         yield value
         value += increment
试试这个:

[(i // 2) * 0.25 * (2*(i&1)- 1) for i in range(1,42)]

这是一个很酷的一行

from itertools import chain

list(chain(*zip([i /4.0 for i in range(10)], [-i/4.0 for i in range(9)])))
[0.0,0.0,0.25,-0.25,0.5,-0.5,0.75,-0.75,1.0,-1.0,1.25,-1.25,1.5,-1.5,1.75,-1.75,2.0,-2.0]


您计划如何使用该功能?你们想做什么?我需要,从零开始,然后检查负值和下一个正值。它的几何计算程序。步长为0.25。因为当我使用
def frange(start,stop,step=1.0):而start为什么它必须是lambda函数而不是普通函数?FWIW,
key=lambda x:abs(x)
可以缩短:
key=abs
。很好,更新……这是最好的答案。numpy解决方案也不错,但这不需要第三方软件包。但您不必将呼叫包装在
列表中。你忘了一个结束语
。谢谢@HåkenLid。我把它包装在一个列表中,只是为了明确地匹配OP的请求,因为我本来打算打印出来,但你完全正确。最好把它脱下来。那么我就不必关闭括号:)
[(i // 2) * 0.25 * (2*(i&1)- 1) for i in range(1,42)]
from itertools import chain

list(chain(*zip([i /4.0 for i in range(10)], [-i/4.0 for i in range(9)])))