2013-03-10 112 views
0

在Python中,什么是总是返回一个元组的简单方法,无论该变量是否包含元组或包含至少一个元组的列表?在任何可能包含元组的元素中查找第一个元组?

# (3, 5) would return (3, 5) 
# 
# [(3, 5), [200, 100, 100]] would return (3, 5) 
# 
# [[100, 100, 100], (3, 5)] would return (3, 5) 
# 
# [(3, 5), (4, 7)] would return (3, 5) 

回答

3

如果我真的需要这样的事情,我会做这样的事情:

def first_tuple(t): 
    return t if isinstance(t,tuple) else next(x for x in t if isinstance(x,tuple)) 

演示:

>>> first_tuple((3,5)) 
(3, 5) 
>>> first_tuple([(3, 5), [200, 100, 100]]) 
(3, 5) 
>>> first_tuple([[100, 100, 100], (3, 5)]) 
(3, 5) 
>>> first_tuple([(3, 5), (4, 7)]) 
(3, 5) 
>>> first_tuple([[],[]]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in first_tuple 
StopIteration 

一般来说,你应该不需要东西喜欢这个。恕我直言,这似乎可能是一个糟糕的设计,这里的数据结构应该重新考虑。

+0

可能是一个糟糕的设计 - 但我不得不写一个真正的通用搜索算法来处理很多不同格式的状态空间。这是一个巨大的帮助,也在学python,谢谢 – 2013-03-10 19:16:16

+1

@ rob-gordon--没问题。我很高兴帮助:)。这个答案结合了python条件表达式和生成器表达式(类似于列表理解)。 (我主要写出这些东西的名字,所以如果你有问题,你可以谷歌他们)。 – mgilson 2013-03-10 19:26:54

+0

您正在寻找[this](http://programmers.stackexchange.com/questions/175655/python-forgiveness-vs-permission-and-duck-typing/175663#175663)。关于你应该检查自己的代码的有效性或不... – 2013-03-11 14:15:02

相关问题