![](/img/trans.png)
[英]How to concatenate a list of tuples into a list of concatenated item from the tuples in 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.