在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((将其转换回list,就像这样:

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

最新更新