在伪代码中复制一个没有双打的数组

Copy an Array without doubles in PseudoCode

我正在尝试将一个值数组复制到另一个数组并以自然顺序删除双精度值(因此 0 值到数组末尾)。 我必须输入伪代码,所以我不能使用简单的函数或方法

为了验证我的想法,我在 Python 中尝试过,如下所示:

A = [1, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9]
B = [0 for b in range(12)]


for i in range(12):

 if  A[i]== A[i-1]: 

 else:
    B[i] = A[i]

print(B)

它给了我:

[1, 2, 3, 4, 0, 5, 0, 0, 6, 7, 8, 9]

但我要查找的结果是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0 , 0]

缺少什么?

您的 i 总是递增的,因此每次迭代,无论您是否复制了一个元素,都将处理 B 中的下一个元素。

您可以跟踪跳过了多少个元素,并使用它来访问正确索引中的 B:

skipped = 0
for i in range(12):
 if  A[i] == A[i-1]:
     skipped += 1
 else:
    B[i-skipped] = A[i]

print(B) 的输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0]

为了避免混淆;数组在 Python.

中称为列表

您的代码检查列表中两个位置的值并替换它或不替换它。这就是您的结果的来源。我们先简化一下

for i in range(12):
    if not A[i] == A[i - 1]:
        B[i] = A[i]
print(B)
>> [1, 2, 3, 4, 0, 5, 0, 0, 6, 7, 8, 9]

所以我不确定你是否真的想要这些尾随零,因为如果你不想要,你可以只使用数据类型 set(),它只会存储唯一值,然后你可以转换它使用 list() 返回列表,像这样:

print(list(set(A)))
>> [1, 2, 3, 4, 5, 6, 7, 8, 9]