如何识别数组中已移动相对位置的项目

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

用更多的上下文/信息重写整个问题

假设某处有代表水果的对象,每个对象都有一个 ID 和价格。

1 - 香蕉 - 1 美元

2 - 苹果 - 2 美元

3 - 橙色 - 3 美元

4 - 梨 - 4 美元

5 - 菠萝 - 5 美元

项目的 ID 按最后更新的顺序(从最新到最旧)存储在数组 A 中

arrA = [1,2,3,4,5]

即,项目 1 是最新更新的项目,项目 5 是最旧更新的项目。假设我更新了 Apple 和 Orange 的价格。我给两者都加了 50c。

现在数组变成:

arrB = [3,2,1,4,5]

也就是说,Orange (ID 3) 是最新更新,Apple (ID 2) 是下一个最新更新,然后 1,4,5 保持相同顺序,因为它们尚未更新。

我只是想仅使用两个数组的顺序(如果可能的话)来识别哪些 ID 已移动(即更新),并将其存储在数组 C 中

所以在这种情况下,数组 C 应包含 3 和 2。数组的长度可能会改变,但两个数组的值应该相同。

我考虑过使用 python Zip 函数来尝试比较两个数组,例如

def moved(arrA, arrB):
    moved = []

    for a, b in zip(arrA, arrB):
        if a != b:
            moved.append(b)

    return moved

arrA = [1, 2, 3, 4, 5]
arrB = [3, 2, 1, 4, 5]

moved_values = moved(arrA, arrB)

print("Moved values:", moved_values)

但是这会失败,因为它没有考虑到数组 A 中 1 最初出现在 2 之前的事实。它只是看到 2 和 2 在两个数组之间处于相同位置,因此没有移动,这是不正确的。任何提示将不胜感激

python arrays algorithm position
2个回答
0
投票

如果 A 和 B 不同,则您一定已经更新了某些内容。最新更新是 B[0],因此将其从两者中删除并将其添加到 C。

如果 A 和 B 相等,则无法判断是否有任何更新。你的例子表明你然后假设什么都没有。

A = [1,2,3,4,5]
B = [3,2,1,4,5]

C = []
while A != B:
    latest = B.pop(0)
    A.remove(latest)
    C.append(latest)

print(C)

输出(在线尝试!):

[3, 2]

-1
投票

不太确定这意味着什么,但此代码应该识别哪些项目已更改列表中的位置

arrA = [1, 2, 3, 4, 5]
arrB = [3, 2, 1, 4, 5]

moved = []

for i in arrB:
    if (i in arrA) and (arrB.index(i) != arrA.index(i)):
        moved.append(i)

print(moved)
© www.soinside.com 2019 - 2024. All rights reserved.