나는 목록이있다 :
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
문자열이 포함 된 항목을 검색하려고합니다 'abc'
. 어떻게해야합니까?
if 'abc' in my_list:
있는지 확인 할 'abc'
목록에 존재하지만 그것의 일부 'abc-123'
와 'abc-456'
, 'abc'
그 자체에 존재하지 않습니다. 그렇다면 어떻게 모든 항목을 얻을 수 'abc'
있습니까?
답변
abc
목록에 문자열 이 있는지 확인하려는 경우 시도해 볼 수 있습니다
some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in some_list):
# whatever
당신이 정말로 모든 항목 포함을 얻고 싶은 경우에 abc
사용
matching = [s for s in some_list if "abc" in s]
답변
이것을 밖으로 던지기 : 예를 들어 abc
and와 같이 둘 이상의 문자열과 일치 해야하는 경우 def
다음과 같이 두 가지 이해를 결합 할 수 있습니다.
matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
산출:
['abc-123', 'def-456', 'abc-456']
답변
filter
가있는 요소를 얻는 데 사용하십시오 abc
.
>>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> print filter(lambda x: 'abc' in x, lst)
['abc-123', 'abc-456']
목록 이해도 사용할 수 있습니다.
>>> [x for x in lst if 'abc' in x]
그건 그렇고, 단어 list
가 이미 list
유형에 사용되었으므로 변수 이름으로 단어 를 사용하지 마십시오 .
답변
‘abc’가 항목 중 하나에 있는지 알아야하는 경우 가장 짧은 방법입니다.
if 'abc' in str(my_list):
답변
이것은 오래된 질문이지만 이전 답변이 문자열 (또는 반복 가능한 객체)이 아닌 목록의 항목에 대처하지 못하기 때문에이 답변을 제공합니다. 이러한 항목으로 인해 전체 목록 이해가 예외로 실패합니다.
반복 불가능한 항목을 건너 뛰어 목록에서 이러한 항목을 정상적으로 처리하려면 다음을 사용하십시오.
[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]
그런 다음 그러한 목록으로
lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'
여전히 일치하는 항목을 얻습니다 ( ['abc-123', 'abc-456']
)
iterable 테스트가 최선이 아닐 수도 있습니다. 여기에서 알 수 있습니다 : 파이썬에서 객체가 반복 가능한지 어떻게 알 수 있습니까?
답변
x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
답변
for item in my_list:
if item.find("abc") != -1:
print item