Python 목록에서 구두점 제거

Muhammad Maisam Abbas 2023년1월30일
  1. string.punctuation Python의 상수
  2. Python에서 for 루프를 사용하여 목록에서 구두점 제거
  3. Python에서 목록 이해를 사용하여 목록에서 구두점 제거
  4. Python의 str.translate() 함수를 사용하여 목록에서 구두점 제거
Python 목록에서 구두점 제거

이 튜토리얼에서는 문자열 상수 string.punctuation을 소개하고 Python의 문자열 목록에서 구두점 기호를 제거하는 몇 가지 방법에 대해 설명합니다.

string.punctuation Python의 상수

string.punctuation은 모든 구두점을 포함하는 Python의 사전 초기화된 문자열입니다. 이 문자열을 사용하려면 string 모듈을 가져와야 합니다. string.punctuation 상수는 다음 코딩 예제에 표시됩니다.

import string

print(string.punctuation)

출력:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

string 모듈을 가져와 string.punctuation 상수 값을 표시했습니다. 출력은 영어로 가능한 모든 구두점을 표시합니다.

Python에서 for 루프를 사용하여 목록에서 구두점 제거

파이썬에서 for 루프와 함께 string.punctuation을 사용하여 문자열 목록에서 모든 구두점을 제거할 수 있습니다. 다음 코드 예제에서는 이 현상을 보여줍니다.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
new_words = []
for word in words:
    for letter in word:
        if letter in string.punctuation:
            word = word.replace(letter, "")
    new_words.append(word)

print(new_words)

출력:

['hello', 'Hi', 'bye bye', 'good bye', '']

문장 부호가 포함된 words 문자열 목록을 초기화했습니다. 그런 다음 words 목록의 각 문자열에 있는 각 문자를 반복하는 중첩 루프를 만들었습니다. 외부 for 루프는 목록 내부의 각 문자열을 반복하고 내부 for 루프는 해당 문자열의 각 문자를 반복합니다. 그런 다음 문자if 문을 사용하여 string.punctuation 상수 안에 있는지 확인했습니다. string.punctuation 상수 내부에 문자가 있으면 빈 문자열로 대체하여 제거합니다. 문자열에서 모든 문장 부호를 제거한 후 해당 문자열을 new_words 목록에 추가합니다. 결국 new_words 목록을 인쇄했습니다.

이 구현의 유일한 문제는 빈 문자열이 최종 목록 안에 남아 있도록 허용한다는 것입니다. 요구 사항에 따라 루프 내부에 추가 검사를 수행하여 원래 목록에서 빈 문자열을 제거할 수도 있습니다. 다음 코드 조각은 목록에서 빈 문자열을 제거하는 방법도 보여줍니다.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
new_words = []
for word in words:
    if word == "":
        words.remove(word)
    else:
        for letter in word:
            if letter in string.punctuation:
                word = word.replace(letter, "")
        new_words.append(word)
print(new_words)

출력:

['hello', 'Hi', 'bye bye', 'good bye']

이번에는 코드가 원래 문자열에서 빈 문자열도 제거했습니다.

Python에서 목록 이해를 사용하여 목록에서 구두점 제거

이전 접근 방식의 유일한 문제는 문자열 목록에서 구두점을 제거하는 간단한 작업에 너무 많은 코드가 필요하다는 것입니다. 목록 이해는 목록 요소에 대해 다양한 계산 작업을 수행하는 방법입니다. 목록 내포 안에 for 루프와 if 문을 사용할 수 있습니다. 목록 이해를 사용하는 주요 이점은 코드가 덜 필요하고 일반적으로 단순한 for 루프보다 빠르다는 것입니다. string.punctuation 문자열 상수와 함께 목록 이해를 사용하여 Python의 문자열 목록에서 구두점 기호를 제거할 수 있습니다. 다음 코드 예제는 목록 내포가 있는 목록에서 구두점을 제거하는 방법을 보여줍니다.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [
    "".join(letter for letter in word if letter not in string.punctuation)
    for word in words
]
print(words)

출력:

['hello', 'Hi', 'bye bye', 'good bye', '']

솔직히 말해서 위의 코드를 이해하는 것은 조금 어렵지만 전혀 복잡하지 않습니다. 그것은 단순히 중첩 목록 이해를 사용하는 것입니다. 코드의 내부 부분은 단일 단어 안의 각 문자가 string.punctuation 상수에 있는지 확인하고 string.punctuation에 없는 문자만 반환합니다. 코드의 이 부분을 묶는 str.join() 함수는 반환된 모든 문자를 빈 문자열과 결합하고 구두점 없이 완전한 단어를 제공합니다. 외부 부분은 words 목록 내의 각 단어에 대해 이 내부 목록 이해를 실행합니다. 우리는 외부 목록 이해에 의해 반환된 단어를 words 목록에 저장합니다. 결국 words 목록의 모든 요소를 ​​표시합니다.

목록 이해를 사용하는 또 다른 이점은 RAM의 공간을 절약할 수 있다는 것입니다. 즉, 코드 전체에서 결과를 저장하기 위한 새 목록을 만드는 대신 원래 목록을 업데이트했습니다. 외부 목록 이해에 추가 if 문을 배치하여 원래 목록에서 빈 문자열을 제거할 수도 있습니다.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [
    "".join(letter for letter in word if letter not in string.punctuation)
    for word in words
    if word
]
print(words)

출력:

['hello', 'Hi', 'bye bye', 'good bye']

이번에는 단어에 요소가 없을 때 외부 목록 이해가 내부 목록 이해를 실행하지 않습니다. 이 접근 방식을 사용하면 결과 문자열 목록에 빈 문자열이 표시되지 않습니다.

Python의 str.translate() 함수를 사용하여 목록에서 구두점 제거

우리의 이전 구현은 더 적은 코드가 필요하고 기존 루프를 사용하는 것보다 빠르기 때문에 좋지만 더 좋을 수 있습니다. 코드는 적지만 코드가 약간 복잡합니다. Python의 문자열 목록에서 구두점을 제거하는 가장 빠르고 효율적인 방법은 str.translate() 함수입니다. 목록 이해보다 적은 코드가 필요하고 훨씬 빠릅니다. str.translate() 함수는 번역 테이블에 따라 문자열 내부의 각 문자를 매핑합니다. 우리의 경우 string.punctuation의 모든 문자를 빈 문자열로 매핑합니다. 다음 코드 예제는 str.translate() 함수를 사용하여 목록에서 구두점 기호를 제거하는 방법을 보여줍니다.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [word.translate(string.punctuation) for word in words]
print(words)

출력:

["hell'o", 'Hi,', 'bye bye', 'good bye', '']

string.punctuation 상수 및 목록 이해와 함께 str.translate() 함수를 사용하여 words 목록에서 구두점 기호를 제거했습니다. word.translate(string.punctuation)string.punctuation 상수의 각 문자를 빈 문자열로 매핑하고 목록 이해는 words 목록의 각 문자열에 대해 이 코드를 실행하고 결과를 반환합니다. 반환된 모든 문자열을 words 목록에 할당하고 출력을 표시합니다.

출력 결과에 빈 문자열이 표시됩니다. 이 빈 문자열을 추가로 제거하려면 목록 이해 안에 추가 조건을 배치해야 합니다.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [word.translate(string.punctuation) for word in words if word]
print(words)

출력:

["hell'o", 'Hi,', 'bye bye', 'good bye']

조건을 하나만 더 추가하여 이전 결과에서 빈 문자열을 제거했습니다.

string.punctuation은 가능한 모든 구두점을 포함하는 미리 정의된 상수 문자열입니다. 여러 메서드가 이 문자열 상수를 사용하여 문자열 목록에서 구두점을 제거하지만 작성하기 가장 쉽고 가장 빠르고 효율적인 구현은 목록 이해와 함께 str.translate() 함수를 사용하는 것입니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Python List

관련 문장 - Python String