gpt4 book ai didi

Python:测试检查列表列表中 bool 元素的正确顺序

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:36 24 4
gpt4 key购买 nike

我解决这个问题的方法可能有点集中在 for 循环和 if 语句上。所以,我有这些数据,如下所示。数据solutions是包含1或0的列表的列表。 solutions 中有一个 6x6 列表,它是正确的解决方案。我实际上手动解决了这个问题,发现它是解决方案中的第五个列表(python索引解决方案[4])。但我不能假设我知道这一点!在 solutions 列表转置后,转置列表中的每个元素都应该有多个 1,反射(reflect) x 数据中的相应数字,如下所示。另外,每组 1 之间必须有一个 0。例如,x[2] = [2, 1, 1]。这意味着在 np.transpose(solutions[p])[2] 中,列表必须是 [1,1,0,1,0,1] .

因此,下面的代码尝试编写一些代码,根据 x 检查每个 solutions 中每行的正确间距和顺序。

final_solutions = []
for p in range(0,len(solutions)):
sol_trans = np.transpose(solutions[p])
for q in range(0,len(x)):
count = 0
for r in range(0,len(sol_trans[q])):
if sol_trans[q][r] == 0:
isok = True
if sol_trans[q][r] == 1:
if sol_trans[q][r+x[q][count]] != 1:
r += x[q][count]-1
count += 1
isok = True
else:
isok = False
break
if isok == True:
final_solutions.append(solutions[p])

下面我将给您一些示例数据。

x
Out: [[1], [4], [2, 1, 1], [1, 1, 1], [4], [1, 1]]

作为测试失败的示例,solutions[0] 将失败,因为 np.transpose(solutions[p])[1] 在当应该有四个连续的 1 时,却出现 1。它也会失败,因为 np.transpose(solutions[p])[2] 在 1 的条目之间没有留下空格。当应该有两个 1 时,有四个连续的 1,后跟 y 一个空格和一个 1,然后再跟另一个 1。它也会失败,因为 np.transpose(solutions[p])[3]需要三个间隔为 1 的单个条目。然而,前两者并没有间隔。

solutions
Out:
[([0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 1, 0],
[0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 0]),
([0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 1, 0],
[0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[1, 1, 0, 0, 1, 1],
[0, 1, 1, 0, 0, 0]),
([0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 1, 0],
[1, 0, 0, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 1, 1],
[0, 1, 1, 0, 0, 0]),
([0, 0, 1, 0, 0, 1],
[0, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 1, 0],
[0, 0, 1, 1, 1, 1],
[1, 1, 0, 1, 1, 0],
[0, 1, 1, 0, 0, 0]),
([0, 0, 1, 0, 0, 1],
[0, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[1, 1, 0, 0, 1, 1],
[0, 0, 1, 1, 0, 0]),
([0, 0, 1, 0, 0, 1],
[1, 1, 1, 1, 0, 0],
[0, 1, 0, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 1, 1],
[0, 0, 0, 1, 1, 0]),
([0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 0]),
([0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 1, 0],
[1, 1, 0, 0, 1, 1],
[0, 1, 1, 0, 0, 0]),
([0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 1],
[0, 0, 1, 1, 1, 1],
[1, 1, 0, 1, 1, 0],
[0, 1, 1, 0, 0, 0]),

有人知道如何修复这个损坏的代码吗?或者也许他们已经解决了类似的问题,或者知道一种我看不到的直观方法来处理这个问题。

感谢您到目前为止!这段代码是 friend 给我的一个谜题的最后一部分。

最佳答案

这里有一个解决方案。我将您的解决方案复制粘贴为列表文字,因此我必须首先将我的解决方案转换为 numpy 矩阵。

for si, solution in enumerate(solutions):
solution = np.matrix(solution)
matched_solution = True
tran_solution = np.transpose(solution)
for i, row_x in enumerate(x):
row = tran_solution[i]
row_x_calc = []
cur = 0
for val in row.flat:
if val:
cur += 1
elif cur:
row_x_calc.append(cur)
cur = 0
else:
if cur:
row_x_calc.append(cur)
if row_x != row_x_calc:
matched_solution = False
break
if matched_solution:
print 'Found', si
print solution
break

关于Python:测试检查列表列表中 bool 元素的正确顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34237276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com