programing

Python의 목록 내에서 하위 문자열 찾기

topblog 2023. 4. 13. 20:29
반응형

Python의 목록 내에서 하위 문자열 찾기

배경:

목록 예:mylist = ['abc123', 'def456', 'ghi789']

다음과 같은 부분 문자열과 일치하는 요소가 있으면 요소를 가져오고 싶다.abc

코드:

sub = 'abc'
print any(sub in mystring for mystring in mylist)

상기의 인쇄물True목록에 있는 요소 중 하나라도 패턴을 포함하는 경우.

서브스트링과 일치하는 요소를 인쇄하고 싶습니다.그래서 만약 내가 확인한다면'abc'인쇄만 하고 싶다'abc123'리스트에서 제외합니다.

print [s for s in list if sub in s]

줄 바꿈으로 구분하려면:

print "\n".join(s for s in list if sub in s)

대소문자를 구분하지 않는 완전한 예:

mylist = ['abc123', 'def456', 'ghi789', 'ABC987', 'aBc654']
sub = 'abc'

print "\n".join(s for s in mylist if sub.lower() in s.lower())

모든 답은 작동하지만 항상 목록 전체를 이동합니다.제가 당신의 질문을 이해한다면, 당신은 첫 번째 시합만 하면 됩니다.따라서 첫 번째 일치를 찾은 경우 목록의 나머지 부분을 고려할 필요가 없습니다.

mylist = ['abc123', 'def456', 'ghi789']
sub = 'abc'
next((s for s in mylist if sub in s), None) # returns 'abc123'

일치가 리스트의 말미에 있는 경우 또는 매우 작은 리스트의 경우, 차이는 없습니다만, 다음의 예를 고려해 주세요.

import timeit

mylist = ['abc123'] + ['xyz123']*1000
sub = 'abc'

timeit.timeit('[s for s in mylist if sub in s]', setup='from __main__ import mylist, sub', number=100000)
# for me 7.949463844299316 with Python 2.7, 8.568840944994008 with Python 3.4
timeit.timeit('next((s for s in mylist if sub in s), None)', setup='from __main__ import mylist, sub', number=100000) 
# for me 0.12696599960327148 with Python 2.7, 0.09955992100003641 with Python 3.4

심플한 사용for루프:

seq = ['abc123', 'def456', 'ghi789']
sub = 'abc'

for text in seq:
    if sub in text:
        print(text)

수율

abc123

서브를 포함한 모든 요소가 인쇄됩니다.

for s in filter (lambda x: sub in x, list): print (s)

그냥 간단한 정규식을 사용하면 됩니다. 이렇게 하면 됩니다.

import re
old_list = ['abc123', 'def456', 'ghi789']
new_list = [x for x in old_list if re.search('abc', x)]
for item in new_list:
    print item

언급URL : https://stackoverflow.com/questions/13779526/finding-a-substring-within-a-list-in-python

반응형