检查数组中的行是否包含特定的值序列并将相应的值添加到另一个数组

问题描述 投票:0回答:1

我在编写代码时遇到了一些麻烦,该代码将遍历包含 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和其他一些页面,看看我是否能找到答案。我知道我还存在其他问题,但我不确定它们是什么,因为我什至无法通过第一个条件。我仍在学习诀窍,所以我提前为我可能做过的任何愚蠢的事情道歉。

python for-loop multidimensional-array iteration
1个回答
0
投票

所以答案很简单,但我忽略了它。第一个更改是使用

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]]
© www.soinside.com 2019 - 2024. All rights reserved.