2013-03-10 124 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

相關問題