当元组通过时,从列表中删除所有相似的元素。如果tuple失败,请尝试下一个

2024-06-26 13:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得这辆自行车除了车座和车把外,我什么都有。以我对这门语言的理解,我还没有 “座位”和“车把”的名称,而不是“转动轮子的手的东西”和“我们必须站起来骑这个东西吗?”你知道吗

我有一个包含ID、target和tag的元组的列表。ID和目标配对,用于可能导致通过或失败的作业队列。你知道吗

如果ID通过,我希望从列表中删除包含该ID的所有其他元组,从而允许刷新的列表继续迭代。如果ID失败,我只希望尝试的ID和它的元组元素从列表中删除——给相同的ID(包含该ID的元组)一个尝试另一个目标的机会。你知道吗

下面,我发布了所需的结果、许多编码尝试中的一个,以及与此问题相关的其他几个StackOverflow帖子。我的编码 试图解决这个问题很可能是拙劣的尝试。我对列表的理解是有限的,但我觉得这在这里可能有用。我已经 也考虑使用字典。你知道吗

相关问题:

编码尝试

s,m,l = ("s","m","l")

list = [(11, '853', s), (12, '853', s), (13, '853', m),
 (11, '421', l), (12, '421', l), (13, '421', s)]

passlist=[]
faillist=[]

jobfail = 13
jobpass = 11

def process(list):
 for e in list:
  if jobfail in e:
   print("jobfail:", e)
   faillist.append(e)
   list.pop()
   continue
  if jobpass in e:
   print("jobpass:", e)
   passlist.append(e)
   list.pop()
  print("list is now:", list)
 return passlist,faillist

print("original list:", list)
process(list)
print("passlist:", passlist)
print("faillist:", faillist)
print("final list:", list)

期望的结果

('original list:', [(11, 853, 's'), (12, 853, 's'), (13, 853, 'm'), (11, 421, 'large'), (12, 421, 'large'), (13, 421, 's')])

Processing 11 -> 853
('jobpass:', (11, 853, 's'))
('passlist:', [(11, 853, 's')])
('faillist:', [])
Any tuple with id = 11 is removed:
('list is now:', [(12, 853, 's'), (13, 853, 'm'), (12, 421, 'large'), (13, 421, 's')])

Processing 12 -> 853
('jobpass:', (12, 853, 's'))
('passlist:', [(11, 853, 's'), (12, 853, 's')])
('faillist:', [])
Any tuple with id = 12 is removed:
('list is now:', [(13, 853, 'm'), (13, 421, 's')])

Processing 13 -> 853
('jobfail:', (13, 853, 'm'))
('passlist:', [(11, 853, 's'), (12, 853, 's')])
('faillist:', [(13, 853, 'm')])
We had a failure, so let's try the next pairing:
('list is now:', [(13, 421, 's')])

Processing 13 -> 421
('jobpass:', (13, 421, 's'))
('passlist:', [(11, 853, 's'), (12, 853, 's'), (13, 421, 's')])
('faillist:', [(13, 853, 'm')])
('list is now:', [])

Tags: inid编码列表isnowlist元组