2013-07-23 5 views
4

목록에서 문자열을 찾는이 질문의 반대는 너무 인기가있어서 내 질문에 대한 답을 찾을 수 없었습니다.목록의 요소가 문자열에 있는지 확인하는 방법

black_list = ["ab:", "cd:", "ef:", "gh:"] 

for line in some_file: 
    if ":" in line and black_list not in line: 
     pass 

이것은 분명히 작동하지 않습니다. true/false를 반환하는 목록을 반복하는 일부 반복이 필요하지만이를 우아하게 수행하는 방법을 알지 못합니다. 감사. 그것은 all()와 같은 효과를 얻을 수도 있습니다

black_list = ["ab:", "cd:", "ef:", "gh:"] 

for line in some_file: 
    if ":" in line and not any(x in line for x in black_list): 
     pass 

을 :

+0

아마 정규 표현식 경우 또는 배열로 분할 :에 관계없이, 당신은 내장 any() 함수와 모두 일을 보여줍니다 이런 일을 할 수있는 그 요소 중 어느 것과도 일치 할 수 있는지 확인하십시오. –

+0

원하는 입출력에 대한 간단한 예를 들려 줄 수 있습니까? – korylprince

답변

6

내장 매크로 any() 기능은 여기에 당신을 도울 수

for line in some_file: 
    if ":" in line and all(x not in line for x in black_list): 
     pass 

을 ...하지만 내가 처음 영어에 가까운 생각 , 따르기 쉽습니다.

+0

그냥 내가보고있는 (바라는) 좋은, 짧다. – Adrian

0

black_list 내의 각 "플래그"를 확인하고 black_list가 포함 된 줄을 필터링 할 수 있습니다. 이것은 all()을 사용하여 수행 할 수 black_list의 모든 요소가있는 경우

for line in some_file: 
    filtered = all(i in line for i in black_list) 
    if filtered and ':' in line: 
     # this line is black listed -> do something 
    else: 
     # this line is good -> do something 

상기 확인합니다.

for line in some_file: 
    filetered = any(i in line for i in black_list_2) 
    if filtered: 
     # this line contains at least one element of the black_list 
    else: 
     # this line is fine 
+1

'in' 연산자가 항상 부울을 반환하기 때문에 'In line else in False'는 약간 중복됩니다. 주어진 경우에'True else else False' 또는 'True if False else False'라고 말하는 것과 비슷합니다. –

+0

@ ZeroPiraeus, 고맙습니다. 적절하게 편집합니다 –

+0

좋은 지적, @ZeroPiraeus. 사실 'in'은 항상 bool을 반환하기 때문에 발생하는 것이 아니라,'any()'가 "iterable의 x에 대해 bool (x)가 True이면 true를 반환"하기 때문에 더 많은 것을 의미합니다. any()'는 if/else와 동일합니다. –

0

귀하의 예제 코드는 문자열뿐 아니라, 파일의 요소를 찾는 것처럼 보이게 : 당신이 black_list의 요소 중 하나가있는 경우 행을 거부 할 경우, any()를 사용하여 . 당신이 문구를 참조하고 '문자열'에 의해

def check_string(text, word_list): 
    return any(phrase in text for phrase in word_list) 

def check_file(filename, word_list): 
    with open(filename) as some_file: 
     return any(check_string(line, word_list) for line in some_file) 

black_list = ["ab:", "cd:", "ef:", "gh:"] 

print check_file('some_file.txt', black_list) 
관련 문제