【发布时间】:2013-04-16 18:17:16
【问题描述】:
我正在尝试按元素 & 和按元素 | 2 个 8 个 6 个二进制数字列表的列表,它的工作非常奇怪。 c1 和 c2 以长度为 8 的元组开始,元素长度为 6 的元组,res 以 c1 的列表版本开始。
安定:
for x in range(8):
for y in range(6):
res[x][y] = (c1[:][x][y])*(c2[:][x][y])
排序:
for x in range(8):
for y in range(6):
res[x][y] = int(c1[:][x][y] or c2[:][x][y])
一个例子:
c1: ((1, 0, 0, 0, 1, 1), (1, 1, 0, 0, 0, 1), (1, 1, 1, 0, 0, 0), (0, 1, 1, 1, 1, 0), (1, 0, 0, 0, 1, 1), (0, 1, 1, 0, 0, 0), (1, 1, 0, 1, 0, 0), (0, 1, 0, 0, 1, 0))
c2: ((1, 0, 1, 1, 0, 0), (0, 1, 0, 1, 1, 0), (0, 1, 1, 0, 1, 0), (0, 0, 0, 0, 1, 1), (1, 1, 0, 0, 1, 0), (1, 0, 1, 0, 1, 0), (0, 0, 0, 1, 0, 1), (0, 0, 1, 0, 1, 0))
anding res:[[1, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0], [1, 0, 0, 0, 1, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0]]
oring res: [[1, 1, 0, 0, 1, 1], [1, 1, 0, 1, 1, 1], [1, 1, 1, 0, 1, 0], [0, 1, 1, 1, 1, 1], [1, 1, 0, 0, 1, 1], [1, 1, 1, 0, 1, 0], [1, 1, 0, 1, 0, 1], [0, 1, 1, 0, 1, 0]]
c1 的其他输入,可能比第一个子列表更混乱。
编辑:已解决。这很可能是代码其他部分的别名问题,我最终使用了列表推导。
【问题讨论】:
-
在 Python 中按索引循环通常是一个非常糟糕的主意。改用list comprehensions来实现这种东西。
-
你在哪里“初始化”了资源?
-
使用
&进行ANDing 和|进行ORing。 -
对于
oring res,第一个元素不应该是[1, 0, 1, 1, 1, 1]吗? -
有更好的方法来编写这段代码,但它不包含任何逻辑错误。当我运行它时,我得到了预期的结果。问题一定出在其他地方。