我如何才能将此条件作为“几乎”随机行走的条件?

时间:2019-05-16 19:26:21

标签: python random

我是python的新手。我正在跟踪一些挑战,其中之一是在某种矩阵(如矩阵)中进行“随机行走”。我实际上首先尝试定义矩阵,并尝试通过某种条件与最近的邻居建立路径,但我不知道该怎么做。

所以我尝试了另一种方法。我有一个循环的步骤,但是我无法重复已使用的网站。我有一个随机条件,可以选择水平或垂直,而其他条件则可以避免超出“矩阵”范围。为了避免重复站点,我使用了“ while”作为其他条件,因为如果它是重复站点,则需要重做随机值(i或j)。我使用“ for”来分析每次x和y数组同时具有重复值。

... #before here there were some start points definitions, etc

for k in range(steps):

    if rd.randint(1,2) == 1:
        i = rd.randint(max(i-1,0),min(i+1,n))
        while ((for w in x, x[w] = i) and (for w in y, y[w] = j):
        #this "while" above isn't good, but it was to see if the w term 
        #of the x and y array were already a pair used in some previous 
        #iteration
            i = rd.randint(max(i-1,0),min(i+1,n))
    else:    
        j = rd.randint(max(j-1,0),min(j+1,n))
        while ((for w in x, x[w] = i) and (for w in y, y[w] = j):
            j = rd.randint(max(j-1,0),min(j+1,n))


    x.append(i)
    y.append(j)

显然,它不起作用,但是我无法弄清楚正确的书写方式,在所有尝试中,我只是得到“无效的语法”。我认为通过使用某种矩阵元素随机选择会很简单,但是我不确定该怎么做。

谢谢,我希望它能得到很好的解释。

1 个答案:

答案 0 :(得分:0)

您可以使用:

if i not in x:

检查它是否在您的列表中。不需要for循环。这是您可以做到的方式:

i = rd.randint(0,n)
j = rd.randint(0,n)

print("The start point is S[{},{}]".format(i,j))
x = []
y=[]
x.append(i)
y.append(j)

for k in range(10):

    if rd.randint(1,2) == 1:
        new_i = rd.randint(max(i-1,0),min(i+1,n))
        if new_i not in x:
            i = new_i
        else :
            print("I'm not moving")
    else:    
        new_j = rd.randint(max(j-1,0),min(j+1,n))
        if new_j not in y:
            j = new_j
        else :
            print("I'm not moving")


    x.append(i)
    y.append(j)
    print("My current position is x = {}; y = {}".format(i,j))