2017-11-01 4 views
-1

목록의 튜플에 True 또는 False가 있는지 확인하는 pythonic 솔루션을 찾고 있습니다.파이썬 목록에서 튜플 내부의 값을 식별하는 방법은 무엇입니까?

나는 다음과 같이했다 :

varList = [(True,)] 
temp = varList.pop(0) 
result = temp[temp.index(True,)] 
print result 

############# 
# If there are more complex result 
varList = [(True, False, False), (True, False)]  

어떻게 더 나은 방법으로이 일을? 당신의 의도가 진정한 가치는 다음과 같이 any 키워드를 사용할 수있는 튜플 또는 튜플에 존재하는지 확인하는 것입니다 경우

+2

는'varList' 항상 하나의 요소를 포함 할 것인가? 파이썬처럼'1'과'0'을'True'와'False'로 다루고 싶습니까? –

+1

varlist에 대한 예제를 제공하십시오. 그것은 진실 또는 거짓만을 포함합니까? 그렇다면 항상 첫 번째 요소가 될 것입니까? –

+0

@Chris_Rands 문제는 때로는 하나 이상의 논리적 테스트 결과가 될 수 있습니다. 필자는 True라는 존재를 확인하기 위해 일부 비범 한 방법을 사용하려고합니다 (포커스이기 때문에). –

답변

1

튜플의 인덱스는 물론 튜플의 인덱스도 반환하려는 경우 이상의 튜플 내 선두로부터, 당신은 시도 할 수 있습니다 :

def isValueInList(varList, value): 
     return [(varList[lst][i],lst,i) for lst in range(len(varList)) for i in range(len(varList[lst])) if varList[lst][i] == value] 

print(isValueInList(varList, True)) 

결과는 다음과 같습니다

[(True, 0, 0), (True, 1, 0)] 

은 여기서

첫 번째 인수가 값이 발견 된 것을 의미한다.

두 번째 인수는 목록 내의 튜플 색인을 지정합니다.

세 번째 인수는 해당 튜플 내에서 발견 된 값의 인덱스를 지정합니다. 여기

제안 편집 enumerate을 사용하고 있습니다 :

def isValueInList(varList, value): 

    return [(val,innerInd, tupInd) for tupInd, tup in enumerate(varList) for innerInd, val in enumerate(tup) if val==value] 

print(isValueInList(varList, True)) 

결과가 될 것입니다 :

[(True, 0, 0), (True, 1, 0)] 
+0

@Vasilis G. 좋은 해결책. 나는 그것을 시도하고 작동합니다. –

+1

@StefanPochmann이 암시 하듯이,'enumerate'를 사용하여보다 편리한 방법이 있기 때문에 편집을 시도 할 것입니다. –

2

result = True in varList[0] 
+2

부울 값에 대한 더 파이썬적인 방법은'any'와'all' 함수를 사용하는 것입니다. Howerever는 목록이 비어있을 때 'True in'및 'False in'접근 방식과 다른 결과를 산출 할 수 있습니다. – dseuss

3

을 시도해보십시오

true_exists = [ any(subset) for subset in varList ] 

당신도 있는지 확인 모든 요소는 all 키워드를 사용하면 True입니다.