我有一个用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之间的所有数字,但index
中c
处的数字除外。
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]]
这是值应该在函数中的任何随机点。这就是idx
中c
处的值不应出现在idx
p
的列表中。
但有时在执行函数期间,x
和y
选择的值会被交换,但另一个值也会受到影响。这就是两个列表有时候的样子
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循环的一些迭代中,除了c
和x
之外,还会在y
中交换两个以上的值。并且因为这些值被交换但是在某些执行中p
没有更新它我输出错误。任何想法为什么要交换两个值。
答案 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
}]