본문 바로가기
Python/Data Structure

[Python]리스트에서 특정 문자열만 추출하기

by 전봇대파괴자 2021. 1. 17.

 

문자열로 된 리스트를 다루다 보면, 특정 문자만 포함된 단어만을 추출하고 싶을 때가 있습니다. 예를 들면, 영어 문장 안에서 'a'가 포함된 단어만을 골라낸다거나, 'ing' 혹은 'ed'가 포함된 단어를 골라내는 것입니다. 아래의 예시를 볼까요.

 

문장 하나가 툭 던져지듯 주어졌다고 치겠습니다.

 

The scientist does not study nature because it is useful, he studies it because he delights in it, and he delights in it because it is beautiful. If nature were not beautiful, it would not be worth knowing, and if nature were not worth knowing, life would not be worth living.

"과학자는 쓸모있기 때문에 자연을 연구하는 것이 아니다. 과학자가 자연을 연구하는 이유는 그것이 기쁨을 주며, 또한 아름답기 때문이다. 만약 자연이 아름답지 않다면 알려고 할 값어치가 없다. 그리고 자연이 알 가치가 없다면 인생 또한 살 가치가 없다."

 

간단한 문장을 쓰지 않아 실수했다는 느낌이 들지만, 이 문장을 무척 좋아해서 골라 봤습니다. 

 

가장 먼저 해야 할 일은 텍스트인 문장을 리스트로 만드는 것입니다.

여기서 주의해야 할 점은 단어들을 기준으로 잘라야 한다는 점입니다. 그대로 list 함수를 사용할 경우 한 글자 한 글자를 기준으로 잘리게 되므로 split를 사용합니다. 

# list에서 특정 문자열이 포함된 item만 추출하고 싶을 때

sentence = 'The scientist does not study nature because it is useful, he studies it because he delights in it, and he delights in it because it is beautiful. If nature were not beautiful, it would not be worth knowing, and if nature were not worth knowing, life would not be worth living.'
sample_li = sentence.split() # 문장을 단어로 잘라 list로 만들어 줌

>> ['The', 'scientist', 'does', 'not', 'study', 'nature', 'because', 'it', 'is', 'useful,', 'he', 'studies', 'it', 'because', 'he', 'delights', 'in', 'it,', 'and', 'he', 'delights', 'in', 'it', 'because', 'it', 'is', 'beautiful.', 'If', 'nature', 'were', 'not', 'beautiful,', 'it', 'would', 'not', 'be', 'worth', 'knowing,', 'and', 'if', 'nature', 'were', 'not', 'worth', 'knowing,', 'life', 'would', 'not', 'be', 'worth', 'living.']

리스트가 만들어지면, 이제 조건에 맞는 단어들을 고를 차례입니다. 

방법은 두 가지가 있습니다. 정확히는 한 가지 방법이라고 해야 맞습니다. 원리는 같기 때문입니다. 

 

첫 번째 방법은 for문을 사용하는 것입니다. 리스트 안의 값들을 하나씩 꺼내 특정값이 포함되었는지 여부를 가린 후, 포함되었을 경우 리스트에 추가합니다. 결과는 다음과 같습니다. 

# 'a'가 포함된 item 추출 → 리스트로 만들기
# 방법 1
a_li = []
for word in sample_li:
    if 'a' in word: # 'a'가 포함된 모든 문자열 추출
        a_li.append(word)
print(a_li)

>> ['nature', 'because', 'because', 'and', 'because', 'beautiful.', 'nature', 'beautiful,', 'and', 'nature']

 

 

두 번째 방법은 첫 번째 방법과 같지만, 좀 더 축약된 코드라고 할 수 있습니다. 

# 'ing'가 포함된 item 추출 → 리스트로 만들기
# 방법 2        
ing_li = [word for word in sample_li if 'ing' in word] # 'ing'가 포함된 모든 문자열 추출
print(ing_li)

>> ['knowing,', 'knowing,', 'living.']

 

이 코드를 응용하면 단순한 텍스트 문장뿐 아니라 데이터프레임에도 활용할 수 있습니다. 도움이 되었기를 바랍니다.