【发布时间】:2017-09-21 02:42:11
【问题描述】:
考虑以下代码:
for i in range(size-1):
for j in range(i+1,size):
print((i,j))
我需要以随机方式执行这个 for 循环。我试图写一个生成器来做这样的事情
def Neighborhood(size):
for i in shuffle(range(size-1)):
for j in shuffle(range(i+1), size):
yield i, j
for i,j in Neighborhood(size):
print((i,j))
但是,随机播放不能应用于任何对象范围。我不知道如何补救这种情况,非常感谢任何帮助。我希望有一个解决方案避免将范围转换为列表,因为我需要速度。例如,大小可能约为 30,000,我将执行此 for 循环大约 30,000 次。
我还计划尽早退出 for 循环,因此我想避免包含 shuffle(list(range(size))) 的解决方案
【问题讨论】:
-
如果你真的需要洗牌,你可以使用
list(range()) -
我认为你所要求的是不可能的。您想以随机顺序遍历 (i, j) 的所有可能组合,但如果您不想重复,则有必要记住您已经使用过哪些组合。这需要 O(size^2) 空间。但我认为你可以比 shuffle(range) 做得稍微好一点。
-
为什么不直接产生随机数?
-
这暗示着“我需要以随机方式通过这个 for 循环”。但也许乔纳森会澄清。
-
这样可以吗,即使是洗牌,你也可以一次遍历你的三角形吗?