2017-01-18 1 views
2

을 사용하여 Python에서 작업 중이므로 String[] 배열과 Reddit API에서 가져온 주석의 일치 여부를 찾습니다.파이썬에서 any()와 일치하는 것을 찾는 방법?

isMatch = any(string in comment.body for string in myStringArray) 

을 그러나 또한 isMatch에 해당하는 경우 만 모르는에게 도움이 될 것입니다,하지만 경기를했다 그 myStringArray의 어떤 요소였다

현재,이처럼하고 있어요. 현재 접근 방식으로이 작업을 수행 할 수있는 방법이 있습니까? 아니면 일치하는 항목을 검색하는 다른 방법을 찾아야합니까?

+4

: 위의 대답으로, 한 성명에서이 작업을 수행하는 독창적 인 방법이 있지만, 그것은 정말 for 루프를 사용하는 것이 합리적이다 'any'를 사용하고 명시적인 for 루프를 사용하여 검사를 수행하십시오. 여기에 어떤 문제도 보이지 않는다. –

답변

1

당신은 조건부 발전기 표현에 default=Falsenext을 사용할 수

next((string for string in myStringArray if string in comment.body), default=False) 

일치하는 어떤 항목이없는 경우 기본값은 반환된다 (그래서 False를 반환 any 같다), 그렇지 않으면 첫 번째 일치 항목이 반환된다 .

이것은 거의 비슷하다 :

isMatch = False # variable to store the result 
for string in myStringArray: 
    if string in comment.body: 
     isMatch = string 
     break # after the first occurrence stop the for-loop. 

또는 다른 변수에 isMatchwhatMatched을 갖고 싶어 :

isMatch = False # variable to store the any result 
whatMatched = '' # variable to store the first match 
for string in myStringArray: 
    if string in comment.body: 
     isMatch = True 
     whatMatched = string 
     break # after the first occurrence stop the for-loop. 
+0

같은 변수에 bool 또는 일치하는 문자열을 저장하는 것이 정말로 좋은 생각일까요? 이것은 동적 인 유형 방법을 너무 멀리 가져 가고있는 것처럼 보입니다. – brianpck

+1

'any'는 단지 그것을 보면서 즉시 이해할 수 있습니다. 'for' 루프는 그리 심각하지 않습니다. 나는 이것을 잠시 보았고 아직도 그것이 작동한다는 것을 스스로 확신 할 수 없다. 그것은 그것을 나쁜 해결책으로 만든다. –

+0

@MarkRansom 'next'가없는 버전을 포함 시켰습니다. 경우에 따라 무슨 일이 일어나는지 이해하는 데 도움이됩니다. :) – MSeifert

0

을 나는 명시 적 루프가 깨끗한 될 것이라는 의견에 동의합니다. 당신은 과 같이 원본을 꾸며 낼 수있다 :

isMatch = any(string in comment.body and remember(string) for string in myStringArray) 
            ^^^^^^^^^^^^^^^^^^^^^ 

여기서

def remember(x): 
    global memory 
    memory = x 
    return True 

isMatchTrue의 경우, 글로벌 memory가 일치하는 문자열을 포함하거나, 원래 (있는 경우)를 어떤 값을 유지 isMatchFalse 인 경우

+3

OP가 해결하려고하는 문제에 유머 감각이 있기를 바랍니다. – brianpck

+0

세계는 악합니다.이 기술을 실제로 사용하려면 일치 항목을 기억할 멤버가있는 클래스 개체를 만듭니다. –

2

그것은 정보의 서로 다른 두 가지 저장하는 하나 개의 변수를 사용하는 것은 좋은 생각이 아니다 : 여부 문자열 일치 (A bool) 및 해당 문자열이 무엇인지(A string을).

당신은 정말 정보 만의 두 번째 조각이 필요합니다 간단하게 제거

match = '' 
for string in myStringArray: 
    if string in comment.body: 
     match = string 
     break 

if match: 
    pass # do stuff 
+0

이것을 함수에 넣으면 완벽합니다. –