문자열 연산에 대한 파이썬 프로그램

게시 됨: 2022-04-26

이 자습서에서는 문자열 작업 에 대해 자주 묻는 질문을 해결하는 Python 프로그램을 작성합니다.

Python 문자열이 회문 , anagrams제목 케이스 에 있는지 확인하는 방법을 배웁니다.

Python 문자열: 빠른 검토

Python에서 문자열은 강력한 내장 데이터 유형입니다. 일련의 문자를 저장할 수 있습니다.

Python 문자열의 인덱싱: 모든 Python iterable과 마찬가지로 문자열도 0으로 인덱싱됩니다. 따라서 길이가 N인 문자열에 대한 유효한 인덱스는 0, 1, 2에서 N – 1까지입니다.

파이썬 문자열

Python은 또한 문자열 끝에서 요소에 액세스하기 위해 음수 인덱싱을 지원합니다. 따라서 -1은 문자열의 마지막 문자 인덱스이고 -2는 문자열의 마지막에서 두 번째 문자 인덱스 등입니다.

Python 문자열의 불변성 : 또한 Python의 문자열은 변경할 수 없으므로 제자리에서 수정할 수 없습니다. 그러나 여기에 대해 여러 문자열 메서드를 호출하고 원하는 결과로 문자열 복사본을 얻을 수 있습니다.

이제 Python 문자열의 기본 사항을 검토했으므로 간단하면서도 흥미로운 문제를 해결해 보겠습니다.

시작하자.

Python 문자열이 회문인지 확인

문제 : 파이썬 문자열이 주어지면 그것이 회문인지 아닌지 확인하십시오.

그렇다면 True를 반환합니다. 그렇지 않으면 False를 반환합니다.

따라서 우리의 첫 번째 문제는 주어진 문자열이 회문인지 여부를 확인하는 것입니다.

회문 은 왼쪽에서 오른쪽으로, 오른쪽에서 왼쪽으로 읽는 문자열입니다. 몇 가지 예를 나열해 보겠습니다. racecar, 참조, 레벨, 마담, 레이더 등.

파이썬 문자열 회문

이 문제를 해결하는 단계는 다음과 같습니다.

  • 문자열의 역 복사본 을 얻고 필요한 경우 다른 변수에 저장합니다.
  • 원래 문자열과 반전된 문자열의 값을 비교합니다.
  • 그들이 같으면 문자열은 회문입니다. 따라서 True 를 반환하고 중지합니다.
  • 원본과 반전된 복사본이 같지 않으면 문자열은 회문이 아닙니다. 따라서 False 를 반환해야 합니다.

핵심 작업은 문자열의 반전된 복사본을 얻는 것입니다. Python에서는 이를 수행할 수 있는 몇 가지 다른 방법이 있습니다.

그러나 다음 두 가지 접근 방식을 살펴보겠습니다.

  • 문자열 슬라이싱 사용
  • reversed() 함수와 join() 메서드 사용

슬라이싱을 사용하여 Python 문자열을 뒤집는 방법

구문 <any_str>[start: stop: step] 은 단계 크기가 stepstart stop 까지 포함하지 않는 문자열 <any_str> 조각을 반환합니다.

  • start 를 생략하면 슬라이스가 문자열의 시작 부분에서 시작됩니다.
  • stop 인덱스를 지정하지 않으면 슬라이스가 문자열 끝까지 확장됩니다.
  • 그리고 step 의 음수 값은 문자열의 끝에서 시작하는 슬라이스를 반환하는 데 사용할 수 있습니다.

따라서 <any_str>[::-1] 은 문자열의 반전된 복사본을 반환합니다.

다음 코드 셀에는 is_palindrome() 함수의 정의가 포함되어 있습니다.

문자열을 인수로 받아 회문인지 여부에 따라 True 또는 False 를 반환합니다.

여기에서 문자열의 역 복사본을 얻기 위해 문자열 슬라이싱을 사용했습니다.

 def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False

️ 이제 함수를 정의했으므로 유효한 문자열을 인수로 사용하여 호출할 수 있습니다.

 is_palindrome("racecar") True

위의 코드 셀에서 racecar 는 회문입니다. 따라서 is_palindrome() 함수는 예상대로 True 를 반환합니다.

이제 river 와 같이 회문이 아닌 문자열로 함수를 호출해 보십시오.

 is_palindrome("river") False

그리고 보시 False 를 반환합니다. 이는 정확합니다.

reversed() 및 join()을 사용하여 Python 문자열을 뒤집는 방법

Python에서는 reversed() 함수와 함께 join() 메서드를 사용하여 문자열을 뒤집을 수 있습니다.

  • reversed() 함수는 문자열의 문자를 통해 역방향 반복기를 반환합니다.
  • 그런 다음 join() 메서드를 사용하여 해당 문자를 역순으로 결합할 수 있습니다.

위의 방법을 사용하여 is_palindrome() 함수를 아래 코드 셀과 같이 다시 작성할 수 있습니다.

 def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False

목록 이해 내에서 is_palindrome() 함수를 사용하여 더 긴 문자열 목록에서 모든 회문을 수집할 수도 있습니다.

 str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']

위의 코드가 작동하는 방식은 다음과 같습니다.

  • str_list 를 통해 트래버스하고 각 문자열에서 is_palindrome() 을 호출합니다.
  • is_palindrome()True 를 반환하면 문자열을 palindromes 목록에 추가합니다.

위의 출력에서 ​​볼 수 있듯이 palindromesstr_list 의 모든 회문 문자열 목록입니다.

두 개의 Python 문자열이 아나그램인지 확인

인터뷰에서 접할 수 있는 또 다른 인기 있는 질문은 str1str2 문자열 쌍이 아나그램인지 여부를 확인하는 것입니다.

두 문자열의 문자 수가 정확히 같으면 두 문자열을 아나그램 이라고 합니다. 즉, 다른 문자열의 문자를 치환 하거나 재배열 하여 문자열 중 하나를 얻을 수 있습니다.

아나그램의 예로는 state-taste, save-vase, 팔꿈치 아래 등이 있습니다.

파이썬 문자열 아나그램

Python에서 카운터 객체를 사용하여 아나그램을 확인하는 방법

간단하고 직관적인 방법은 두 문자열에서 각 문자의 발생 횟수를 계산하는 것입니다. 그런 다음 개수가 동일한지 확인합니다.

itertools 모듈의 Counter 객체를 사용하면 훨씬 더 쉽게 할 수 있습니다. Counter 객체는 Python 사전을 반환합니다. 문자는 키로 , 해당 개수는 으로 사용합니다.

아래와 같이 "save""vase" 문자열을 고려하십시오.

 str1 = "save" str2 = "vase"

여기에서 c1c2 는 각각 문자열 str1str2 의 문자 수를 포함하는 카운터 객체입니다.

 from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True

c1 == c2str1str2 가 아나그램이므로 True 를 반환합니다.

이 논리를 사용하여 이제 두 개의 매개변수 word1word2 를 사용하여 are_anagrams() 함수를 정의할 수 있습니다. 함수 본문에서 Counter(word1) == Counter(word2) 인지 확인합니다.

 def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False

️ 확인하려면 str1 , str2 를 인수로 사용하여 are_anagrams() 를 호출하십시오. str1str2 는 아나그램("save" 및 "vase")이므로 함수는 True 를 반환합니다.

 are_anagrams(str1, str2) True

정렬된 문자열 복사본을 사용하여 아나그램을 확인하는 방법

이 작업을 수행할 수 있는 다른 방법이 있습니다.

두 문자열이 아나그램이면 정렬된 복사본 이 동일합니다.

따라서 우리는 함수 are_anagrams() 를 다시 작성하여 str1 의 정렬된 버전이 str2 의 정렬된 복사본과 동일한지 확인할 수 있습니다. 동일하면 두 문자열은 아나그램입니다. 그렇지 않으면 그렇지 않습니다.

위의 방법을 사용하여 정렬된 복사본의 동등성을 확인하면 다음과 같이 are_anagrams() 함수를 다시 작성할 수 있습니다.

 def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False

이제 몇 가지 함수 호출을 해보자.

  • "elbow" 및 "below" 문자열은 아나그램이며 are_anagrams() 함수는 True 를 반환합니다.
  • 그리고 "state"와 "tasted"는 아나그램이 아니며 함수는 False 를 반환합니다.
 are_anagrams("below","elbow") True are_anagrams("state","tasted") False

Python 문자열이 제목 대소문자에 있는지 확인

이 튜토리얼의 마지막 질문은 다음과 같습니다.

문제 : 주어진 문자열: 사람의 이름 - 이름과 성을 포함합니다.

이름과 성의 첫 글자가 모두 대문자인지 확인해야 합니다.

각 단어의 첫 글자가 대문자인 이러한 유형의 대/소문자를 제목 대/소문자 라고 합니다.

따라서 이름이 제목 대소문자에 있는지 확인해야 합니다.

1. 그렇다면 형식이 제목 대소문자에 있다는 메시지를 출력합니다.

2. 그렇지 않으면 제목 케이스에 서식이 지정된 문자열의 복사본을 반환합니다.

파이썬 문자열 제목 케이스
  • Python에는 문자열이 제목 대소문자에 있는지 여부를 확인하는 내장 문자열 메서드 istitle() 이 있습니다.

<str>.istitle() 은 문자열 <str> 이 제목의 형식이면 True 를 반환하고, 그렇지 않으면 False 를 반환합니다.

  • 그리고 Python의 문자열 메서드 title() 은 제목 케이스에 서식이 지정된 문자열의 복사본을 반환합니다.

이제 이 두 가지 방법을 사용하여 문제를 해결할 수 있습니다.

name 을 인수로 받아들이는 함수 check_titlecase() 를 정의합니다.

  • 입력 문자열에서 istitle() 메서드를 호출하여 제목 대소문자 형식이 지정되었는지 확인할 수 있습니다.
  • True 이면 문자열이 이미 제목 대소문자를 사용하고 있음을 인쇄할 수 있습니다.
  • 그렇지 않으면 title() 메서드를 호출하고 제목의 경우 문자열의 복사본을 반환할 수 있습니다.

다음 코드 셀은 check_titlecase() 함수의 정의를 보여줍니다.

 def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()

이제 인수를 사용하여 check_titlecase() 메서드를 호출해 보겠습니다.

 check_titlecase("jane smith") # Output Jane Smith

위의 출력에서 ​​"Jane Smith"라는 문자열이 이제 제목 케이스에 있는 것을 볼 수 있습니다.

️ 다른 예를 들어보겠습니다.

 check_titlecase("agatha Christie") # Output Agatha Christie

이번에는 제목이 대문자인 문자열로 함수를 호출해 보겠습니다.

 check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.

문자열이 제목 형식으로 지정되었다는 알림을 받고 함수가 예상대로 작동합니다.

결론

이제 지금까지 논의한 문제를 요약해 보겠습니다.

  • 문자열이 회문인지 확인하려면 문자열과 그 반대 버전이 동일한지 확인합니다. 문자열 슬라이싱 또는 내장 메소드를 사용하여 문자열을 반전시킬 수 있습니다.
  • 두 문자열이 아나그램인지 확인하려면 정렬된 복사본이 동일한지 확인합니다. 그리고 문자열을 정렬하려면 내장된 sorted() 함수를 사용하십시오.
  • 이름이 제목 대소문자인지 확인하려면 .istitle() 메서드 를 사용하여 확인하고 .title() 메서드를 사용하여 문자열의 제목 대소문자 복사본을 가져옵니다.

파이썬 문자열에 대한 이 튜토리얼을 즐겼기를 바랍니다. 다음 단계로 Python에서 목록 이해를 사용하는 방법을 배우거나 Python의 같지 않음 연산자에 대해 알아보세요.

즐거운 학습과 코딩!