我在编写代码时遇到了一些麻烦,该代码将遍历包含 5 位字符串行的数组,并根据位的顺序将相应的 4 位字符串添加到空数组中。我正在使用的数组是:
[[1, 1, 1, 1, 1], [0, 0, 1, 0, 0], [0, 1, 0, 1, 1], [0, 0, 0, 0, 0],..,[0, 1, 1, 0, 1], [1, 0, 0, 1, 0], [1, 1, 1, 1, 1]]
我正在尝试编写一个循环来遍历这个数组(以及未来的数组),这将为我做这件事,但我坚持如何让我的代码读取每一行。
我当前拥有的部分代码(以“fb”作为数据数组)是:
array = []
for i in range(len(fb)):
if any([1, 1, 1, 1, 1] == fb[i]):
array.append([9, 9, 9, 9])
elif any([0, 0, 1, 0, 0] == fb[i]):
array.append([1, 0, 1, 0])
elif any([0, 1, 0, 1, 1] == fb[i]) & (fb[i-1, 5] == 0):
array.append([0, 1, 1, 0])
elif any([0, 1, 0, 1, 1] == fb[i]) & (fb[i-1, 5] == 1):
array.append([0, 0, 0, 0])
有些有第二个条件,查看前一行的最后一个元素。然后应该发生的是我应该得到一个如下所示的新数组:
[[9, 9, 9, 9], [1, 0, 1, 0], [0, 1, 1, 0],...]
但是我遇到的问题是:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我尝试对其应用any()(有点像这样:检查列表中是否有两个项目,按特定顺序?),但问题是我不知道如何让它返回索引。我还参考了此页面:Find a value in a list和其他一些页面,看看我是否能找到答案。我知道我还存在其他问题,但我不确定它们是什么,因为我什至无法通过第一个条件。我仍在学习诀窍,所以我提前为我可能做过的任何愚蠢的事情道歉。
所以答案很简单,但我忽略了它。第一个更改是使用
and
而不是 @furas 在评论中提到的 &
。这是因为我实际上并没有使用 numpy
数组,而是使用常规 python
列表。第二个变化是完全删除 any()
的使用。新代码现在如下所示:
array = []
for i in range(len(fb)):
if fb[i] == [1, 1, 1, 1, 1]:
array.append([9, 9, 9, 9])
elif fb[i] == [0, 0, 0, 0, 0]:
array.append([8, 8, 8, 8])
elif (fb[i] == [0, 0, 1, 0, 0]):
array.append([1, 0, 1, 0])
elif (fb[i] == [1, 0, 1, 0, 0]) and (fb[i-1, 5] == 0):
array.append([0, 0, 0, 0])
elif (fb[i] == [1, 0, 1, 0, 0]) and (fb[i-1, 5] == 1):
array.append([0, 1, 1, 0])
fb
的一小部分样本是:
[[1, 1, 1, 1, 1], [0, 0, 1, 0, 0], [0, 1, 0, 1, 1], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0]]
打印新填充的数组会产生我最初期望的结果:
[[9, 9, 9, 9], [1, 0, 1, 0], [9, 9, 9, 9], [1, 0, 1, 0]]