gpt4 book ai didi

python - 从两个列表中找到丢失的名字

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:21 26 4
gpt4 key购买 nike

这是一个说明情况的例子。假设我们有两个包含一些名字的列表。我称它们为原始 (O) 和修改 (M) 列表。注意,M 漏掉了名字。我无权访问 O,但我可以访问 M。我从 O 那里得到的是一个列表,我称之为 O1,它遵循两个条件:(1) 在重复的情况下,只有最近的名字应该考虑到,(2)O1的顺序是O的后进先出。

举个例子,假设原始列表包含 O={n1,n2,n3,n2,n1,n3,n1,n3} 其中 n1 是第一个在第一、第五和第七位置写下自己名字的人.所以,我得到的是 O1={n3,n1,n2},这两个条件都适用。现在,修改后的列表包含 M={n2,n3,n2,n1,n3,n1}(两个名称已被删除(n1, n3)),按照这两个条件我可以创建 M1={n1,n3, n2}。通过比较O1,和M1

O1={n3,n1,n2}

M1={n1,n3,n2}

我发现 n3 是一个缺失的名字,因为 n3 在我生成的列表 (M1) 中的位置已被修改。

如何将 n1 捕获为缺失的名称?

最佳答案

这可以通过使用 deque 作为 LIFO 来提供

from collections import deque

class lifo(): # LIFO
""" Use lifo class to implement condition
2) the order of elements is a LIFO """
def __init__(self, iterable=None):
if iterable is None:
self.queue = deque()
else:
self.queue = deque()
for item in iterable:
self.add(item)

def add(self, item):
""" Condition (1) in the case of repetition,
only the most recent name should be
considered if item in self.queue: so
remove if item alredy in lifo """
if item in self.queue:
self.queue.remove(item)
self.queue.append(item)

def get(self): # reverse since deque shows items in reverse order
return reversed(self.queue)

def __str__(self):
return str(list(reversed([k for k in self.queue])))


O1 = ['n1','n2','n3','n2','n1','n3','n1','n3']
M = ['n2','n3','n2','n1','n3','n1']

# Place O1 & M in LIFO
q1 = lifo(O1)
q2 = lifo(M)

# Detect changes in position
changes = [x for x, y in zip(q1.get(), q2.get()) if x != y]
print(changes)
print(q1)
print(q2)

输出

changes: ['n3', 'n1'] => Missing names (change in position)
q1: ['n3', 'n1', 'n2'] => lifo(O1)
q2: ['n1', 'n3', 'n2'] => lifo(M)

关于python - 从两个列表中找到丢失的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com