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

标签 python list tuples

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

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

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 中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)]

关于Python,如果包含匹配的元组,则删除整个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396447/

相关文章:

python - 如何在 NLTK 词性 (POS) 标记中仅获取所选标记的单词?

list - 在不使用列表的情况下确定(在 Haskell 中)一个数字是否是回文

python - tkinter 和 matplotlib Canvas 显示,但不显示导航工具栏和图形标题

python - Pandas 条件格式不显示背景颜色。 (没有错误)

ARPA 文件的 Python 接口(interface)

c# - 在 C# 中优化列表性能

python - 将字符串添加到 python 列表的每个元素

scala - Scala 中是否可以对变量进行元组赋值?

python - 按列表中元组的顺序将多个元组列表组合成新的元组列表(python3)

php - 什么 NLP 库适合对共享主机上的英文文本进行基本分析?