繁体   English   中英

更简单的方法来检查一个元组列表中的项目是否不存在于 python 中的另一个元组列表中

[英]Easier way to check if an item from one list of tuples doesn't exist in another list of tuples in python

我有两个元组列表,比如说,

list1 = [('item1',),('item2',),('item3',), ('item4',)] # Contains just one item per tuple
list2 = [('item1', 'd',),('item2', 'a',),('item3', 'f',)] # Contains multiple items per tuple

Expected output: 'item4' # Item that doesn't exist in list2

如上例所示,我想检查列表 1 中元组中的哪个项目不存在于列表 2 中元组的第一个索引中。在不运行两个 for 循环的情况下执行此操作的最简单方法是什么?

假设您的元组结构完全如上所示,这将起作用:

tuple(set(x[0] for x in list1) - set(x[0] for x in list2))

或者根据@don't talk just code,更好地理解:

tuple({x[0] for x in list1} - {x[0] for x in list2})

结果:

('item4',)

这给你{'item4'}

next(zip(*list1)) - dict(list2).keys()

next(zip(*list1))为您提供元组('item1', 'item2', 'item3', 'item4')

dict(list2).keys()为您提供dict_keys(['item1', 'item2', 'item3']) ,它很乐意为您提供设置差异之类的设置操作。

在线试用!

这是我能想到的唯一方法,但不确定是否有帮助。 我删除了list1中项目中的逗号,因为我不明白为什么它们在那里并且它影响了代码。

list1 = [('item1'),('item2'),('item3'), ('item4')] # Contains just one item per tuple
list2 = [('item1', 'd',),('item2', 'a',),('item3', 'f',)] # Contains multiple items per tuple
not_in_tuple = []

OutputTuple = [(a) for a, b in list2]
for i in list1:
    if i in OutputTuple:
        pass
    else:
        not_in_tuple.append(i)

for i in not_in_tuple:
    print(i)

您别无选择,只能遍历这两个列表。 曾经有效的方法可能是首先构造一组 list2 的第一个元素:

items = {e[0] for e in list2}
list3 = list(filter(lambda x:x[0] not in items, list1))

Output:

>>> list3
[('item4',)]

试试set.difference

>>> set(next(zip(*list1))).difference(dict(list2))
{'item4'}
>>> 

或者更好:

>>> set(list1) ^ {x[:1] for x in list2}
{('item4',)}
>>> 

这是集合的差异操作:

set1 = set(j[0] for j in list1)
set2 = set(j[0] for j in list2)
result = set1.difference(set2)

output:

{'item4'}
for i in list1:
  a=i[0]
  for j in list2:
      b=j[0]
      if a==b:
          break
  else:
      print(a)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM