如何检查列表中是不是有元组?
Posted
技术标签:
【中文标题】如何检查列表中是不是有元组?【英文标题】:How to check if there's a tuple inside a list?如何检查列表中是否有元组? 【发布时间】:2018-10-29 12:58:02 【问题描述】:为什么会这样:
seq = [(1, 2), (3, 4), (5, 6)]
print(() in seq)
返回False
?如何检查在没有特定值的序列中是否存在元组,甚至是通用序列,as in this answer。
【问题讨论】:
列表会被任意嵌套吗?还是像你的例子一样平坦? 您正在检查的是列表中是否存在一个空元组。您可以改为检查类型。 你为什么期望它会起作用?真的。我不明白是什么让你认为这可能有效。这似乎不仅仅是一个疯狂的猜测,因为您似乎对它不起作用的事实感到困惑。是什么思维过程让你认为它可以做你想做的事?如果您发现自己对这类事情感到困惑,您应该在发帖前问自己这个问题并得到答案。如果你这样做了,你经常会发现有些事情你认为是真的,但实际上并不确定,如果你去检查,那么你可能甚至不需要发布。 【参考方案1】:()
是一个空元组。 seq
不包含空元组。
你想要
>>> seq = [(1, 2), (3, 4), (5, 6)]
>>> any(isinstance(x, tuple) for x in seq)
True
对于通用序列,您可以使用
>>> from collections import abc
>>> any(isinstance(x, abc.Sequence) for x in seq)
True
但是,许多对象被非正式地视为序列,但既没有实现完整的协议 abc.Sequence
定义,也没有注册为 Sequence
的虚拟子类。
阅读this excellent answer了解更多信息。
你可以找到一个关于检测序列的问题here。
【讨论】:
我相信abc.Iterable
在这里也有用
@cat 不幸的是,并非如此。我详细写了为什么检查abc.Iterable
是不可靠的here。
好奇:any()
是否贪婪地运行,一开始就停止True
-你的出现?
@BradSolomon 是的,any
很懒惰。【参考方案2】:
您正在检查的是列表中是否存在一个空元组。
您可以改为检查类型。
def has_tuple(seq):
for i in seq:
if isinstance(i, tuple):
return True
return False
【讨论】:
@timgeb 我故意提供伪代码来鼓励 OP 自己实现它。 如果您不喜欢编辑,我很抱歉。随意回滚。以上是关于如何检查列表中是不是有元组?的主要内容,如果未能解决你的问题,请参考以下文章