【问题标题】:Create infinite random walk using iterators in Python在 Python 中使用迭代器创建无限随机游走
【发布时间】:2020-08-06 19:10:15
【问题描述】:

我有一个关于随机游走的练习题:

到目前为止,我的代码如下所示:

import random
import itertools
p = [0,0]

def random_walk():
    yield p
    for _ in itertools.count(0,1):
        sign = random.randrange(-1, 2,2)
        cord = random.randint(0,1)
        p[cord] += sign
        yield p

但是,当我运行它时,什么也没有发生。我认为它运行太多次太快而无法实际产生任何东西。有没有办法解决这个问题,所以它输出一个像问题文本中的序列?只是为了让您知道,我正在参加 Python 入门课程,重点是科学应用程序,因此我的编程知识一般来说非常有限。 稍后在练习中,我应该使用itertools.islice 来生成有限路径,但我需要首先使用它。任何帮助将不胜感激!

【问题讨论】:

  • 您的代码没有调用 random_walk。您还应该返回您的列表的副本,而不是您修改的列表。否则你可能会修改调用者的观点。

标签: python python-3.x function iterator


【解决方案1】:

您必须使用生成器来查看结果(例如在 for 循环中)。此外,生成器应该返回单独的值,而不是到目前为止的累积值列表:

import random
def random_walk():
    x = y = 0
    offsets = [ (0,1),(0,-1),(1,0),(-1,0) ]
    while True:
        yield (x,y)
        dx,dy = random.choice(offsets)
        x,y   = x+dx, y+dy

输出:

from itertools import islice
print(*islice(random_walk(),10))

(0, 0) (-1, 0) (-1, -1) (0, -1) (0, 0) (-1, 0) (-1, -1) (-2, -1) (-2, -2) (-2, -1)

证明它是无限的:

for point in random_walk(): print(point, end=" ")

(0, 0) (-1, 0) (-1, -1) (-1, -2) (0, -2) (0, -3) (0, -4) (-1, -4) (-2, -4) (-3, -4) (-4, -4) (-4, -5) (-5, -5) (-4, -5) (-3, -5) (-3, -6) (-4, -6) (-4, -7) (-4, -6) (-3, -6) (-3, -7) (-4, -7) (-5, -7) (-4, -7) (-5, -7) (-5, -6) (-4, -6) (-3, -6) (-4, -6) ...

注意你必须用 control-C 中断这个循环,因为它是无限的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多