Skip to main content
 首页 » 编程设计

Python,如果包含匹配的元组则删除整个列表

2025年05月04日17birdshome

我希望以前没有人问过这个问题,但我很难用语言表达我正在尝试做的事情!

如果我解释我的输入和期望的输出可能会更容易

l1 = [[(14, 'h'), (14, 'd')], [(14, 'h'), (14, 'c')], [(14, 'h'), (14, 's')], [(14, 'd'), (14, 'c')], [(14, 'd'), (14, 's')], [(14, 'c'), (14, 's')], [(13, 'h'), (13, 'd')], [(13, 'h'), (13, 'c')], [(13, 'h'), (13, 's')], [(13, 'd'), (13,'c')], [(13, 'd'), (13, 's')], [(13, 'c'), (13, 's')], [(12, 'h'), (12, 'd')], [(12, 'h'), (12, 'c')], [(12, 'h'), (12, 's')], [(12, 'd'), (12, 'c')], [(12, 'd'), (12, 's')], [(12, 'c'), (12, 's')]] 
 
l2 = [(13,'h'),(13,'d'),(14,'c'),(14,'s'),(14,'h')] 

所以第一个列表 l1 是一个列表列表,每个列表都是 2 张扑克牌。

基本上我要做的是,如果一张牌在 l2 中,则需要移除 l1 中的手牌。因此条目 [(14,'d'),(14,'c')] 需要从 l1 中删除,因为 (14,'c') 在 l2 中——即使 (14,'d') 不在 ' l2 中的 t。

这个例子的期望输出应该是,

[[(13, 'c'), (13, 's')], [(12, 'h'), (12, 'd')], [(12, 'h'), (12, 'c')], [(12, 'h'), (12, 's')], [(12, 'd'), (12, 'c')], [(12, 'd'), (12, 's')], [(12, 'c'), (12, 's')]] 

我想遍历 l1 中的所有元组,如果它们在 l2 中则删除它们,然后返回并遍历 l1 中的列表并删除任何没有 len == 2 的列表。这看起来不像不过,最好的方法。

有什么想法吗?

很多TIA!

请您参考如下方法:

l2_set = set(l2) 
# or use  
#   l2_set = {(13,'h'),(13,'d'),(14,'c'),(14,'s'),(14,'h')} 
# directly 
 
l1 = [hand for hand in l1 if not (hand[0] in l2_set or hand[1] in l2_set)] 

如果条目可能包含≥2 个成员,您可以将过滤条件概括为

l1 = [hand for hand in l1 if all(subhand not in l2_set for subhand in hand)]