如何使用 python 编写自定义生成器函数
How do I write a custom generator function with python
我有这个
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
并像这样使用:
for error in self.frange(-2.5, 2.5, 0.25):
但它 returns [-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
然后将其命名为:
opposing_numbers(0.25, 5)
试试这个:
[(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]
我有这个
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
并像这样使用:
for error in self.frange(-2.5, 2.5, 0.25):
但它 returns [-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
然后将其命名为:
opposing_numbers(0.25, 5)
试试这个:
[(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]