列表上的Python连续操作以错误的顺序执行

时间:2017-09-03 19:06:16

标签: python python-2.7

我有一个用python编写的函数,它在两个列表上执行一些连续的操作。问题是,在执行这些功能的过程中,它们会给出错误的答案。函数内的代码是

def temp(c, p):
    random.seed(0)
    x = random.randint(0 , len(c)-1)
    y = random.randint(0 , len(c)-1)

    s_1 = c[x][0]
    s_2 = c[y][0]

    p[x] += [s_1]
    p[y] += [s_2]
    p[x].remove(s_2)
    p[y].remove(s_1)

    c[x], c[y] = c[y], c[x]

    return c, p

def anotherFunction():
    iter = 1000
    for i in iter:
        c_main, p_main = temp(c, p)

我有一个列表,列表的编号从0到n。例如,c包含以下

c = [[7], [6], [1], [2], [5], [4], [0], [3]]

p也是一个列表,其中包含0到n之间的所有数字,但indexc处的数字除外。

p = [[0, 2, 4, 6, 5, 1, 3]
     [0, 1, 2, 3, 4, 5, 7]
     [0, 2, 3, 4, 6, 7, 5]
     [0, 1, 3, 5, 6, 7, 4] 
     [0, 2, 4, 6, 7, 3, 1] 
     [0, 1, 2, 3, 6, 7, 5] 
     [1, 2, 3, 4, 5, 6, 7] 
     [0, 1, 2, 4, 5, 6, 7]]

这是值应该在函数中的任何随机点。这就是idxc处的值不应出现在idx p的列表中。 但有时在执行函数期间,xy选择的值会被交换,但另一个值也会受到影响。这就是两个列表有时候的样子

c = [[3], [1], [4], [5], [7], [0], [2], [6]]
p = [[0, 1, 2, 4, 5, 6, 7]
    [0, 2, 3, 4, 5, 6, 7]
    [0, 1, 2, 3, 6, 7, 4]
    [0, 1, 2, 3, 6, 5, 5]
    [0, 1, 2, 3, 4, 6, 7]
    [1, 2, 3, 4, 6, 7, 5]
    [0, 1, 3, 4, 5, 6, 7]
    [0, 1, 2, 3, 4, 5, 7]]

我无法理解这些连续操作是如何受到彼此影响的。该函数在另一个函数的循环内调用。

更新 我更仔细地调试了我的代码,并意识到在for循环的一些迭代中,除了cx之外,还会在y中交换两个以上的值。并且因为这些值被交换但是在某些执行中p没有更新它我输出错误。任何想法为什么要交换两个值。

1 个答案:

答案 0 :(得分:2)

您的代码不完整。

你接缝就像这样调用你的函数:

range

注意:如果修复了您的代码:添加temp()并为p中的每一行添加逗号。

但在import random def temp(c): # -- raw matrix p = [[col for col in range(8)] for row in range(len(c))] # -- drop a number for p_row, c_row in zip(p, c): p_row.pop(c_row[0]) # -- shuffle for row in p: random.shuffle(row) return p 函数中,您正在修改 p 的内容。 所以,你可能没有你期望的。因为您在每次迭代时都重复使用相同的 p 。所以有时会变得不一致。

你想要的,当然是这样的:

cols = [[3], [1], [4], [5], [7], [0], [2], [6]]
print(temp(cols))

你可以像这样使用它:

[[6, 1, 4, 5, 7, 2, 0],
 [3, 0, 5, 4, 2, 7, 6],
 [2, 7, 0, 3, 6, 5, 1],
 [1, 2, 7, 4, 6, 3, 0],
 [3, 1, 4, 6, 2, 0, 5],
 [4, 5, 6, 3, 7, 1, 2],
 [0, 6, 1, 5, 7, 3, 4],
 [4, 3, 7, 0, 1, 5, 2]]

你得到:

displayName: String,
conversations: [{ 
    unique: String,
    status: String, 
    timeStamp: Date
}]