2013-03-10 3 views
0

파이썬에서 문제의 변수가 하나의 튜플 또는 적어도 하나의 튜플을 포함하는 목록을 보유하고 있는지 여부에 관계없이 항상 튜플을 반환하는 간단한 방법은 무엇입니까?튜플을 포함하거나 포함 할 수있는 모든 튜플을 찾는다.

# (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 

말하기, 당신은 뭔가를 필요가 없습니다를 이렇게. IMHO, 이것은 아마 그것은 가난한 디자인이고 여기의 데이터 구조는 재고되어야한다고 생각합니다.

+0

가난한 디자인 일 수 있습니다. 그러나 많은 다른 형식으로 상태 공간을 처리하는 정말 일반적인 검색 알고리즘을 작성해야합니다. 이것은 파이썬을 배우는 데있어서 큰 도움이됩니다. –

+1

@ rob-gordon - 아무 문제 없습니다. 기꺼이 도와 드리겠습니다 :). 이 대답은 파이썬 조건부 표현식과 생성기 표현식을 결합합니다 (목록 이해와 유사 함). (나는 주로 이러한 것들의 이름을 쓰고있어 그래서 당신이 질문이 있다면 당신이 그들을 구글 수 있습니다). – mgilson

+0

당신은 [this] (http://programmers.stackexchange.com/questions/175655/python-forgiveness-vs-permission-and-duck-typing/175663#175663)를 찾고 있습니다. 당신이 유효성에 대한 자신의 코드를 확인해야하는지에 대해 ... –

관련 문제