用更多的上下文/信息重写整个问题
假设某处有代表水果的对象,每个对象都有一个 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 在两个数组之间处于相同位置,因此没有移动,这是不正确的。任何提示将不胜感激
如果 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]
不太确定这意味着什么,但此代码应该识别哪些项目已更改列表中的位置
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)