2016-09-05 4 views
1

특정 하위 문자열을 검색하고 목록에있는 모든 문자열에 하위 문자열이있는 경우에만 결과를 반환해야하는 문자열 목록이 있습니다. 내 첫 번째 아이디어는 하위 문자열이 내 목록의 각 큰 문자열에 있는지 여부와 일치하는 부울 값 목록을 만든 다음이 인덱스 목록이 모든 인덱스에서 True인지 여부를 확인하기 위해 다른 루프를 작성하는 것이 었습니다. 아무도 더 우아하고 효율적인 방법에 대한 제안이 있습니까?목록의 모든 문자열에 특정 문자열이 있는지 추적하는 방법은 무엇입니까?

감사합니다.

+0

하나의 지능형리스트가 수행해야합니다. – Andrew

+0

[all()] (https://docs.python.org/3/library/functions.html#all) 도움이됩니다. – wwii

답변

2

당신은 all()in을 사용할 수 있습니다 : 위의 버전은 unnecessary checks을 수행 할 수

l = ["pie", "lie", "die"] 
all(['ie' in x for x in l]) 

.

all('ie' in x for x in l) 
+1

listcomp를 불필요하게 사용하면 단락이 발생하지 않습니다. – DSM

+0

내가 답을 편집 했으니, 이제 단락에 대해 검색해야만합니다 :) 감사합니다. – Tempux

0

내가 사용하는 것이 내장 all 기능 generator expression와 함께 던져 - 멀리 중간 목록을 작성하지 않도록 할 수 있습니다. 코드가 하나의 선으로 표현 될 수 있기 때문에, 나는 대신 일반적인 def function()lambda expression를 사용하여 정의하는 것 :

# define function via lambda 
in_all = lambda strings, specific: all(specific in strng for strng in strings) 
in_all.__doc__ = """ Check whether all strings in list contain specified string. """ 

l1 = ["day", "lay", "may"] 
l2 = ["day", "lay", "may", "not"] 

print(in_all(l1, "ay")) # -> True (all had specific string) 
print(in_all(l2, "ay")) # -> False (at least one didn't have 
         #   the specific string) 
+0

람다 (lambda)를 사용하고 즉시 이름을 지정하면 어쨌든 불편할 것입니다 만, 수동으로 dunder를 사용하여 그것을 문서화 하시겠습니까? 왜 일반 함수 구문을 사용하지 않는 것이 좋을까요? – DSM

+0

짧은 기능을 정의하기 위해 lamdas를 사용하는 것을 좋아하지 않지만 doc 문자열에 대한 귀하의 요점은 유효합니다. 나는 그저 객체가 함수라는 사실을 보여주기위한 이유가 없기 때문에 그것을 버렸습니다. 대부분의 사람들은 아마 신경 쓰지 않아도되고, 대부분의 짧은 함수는 필요하지 않습니다. – martineau

관련 문제