变位词检查器:一个 Python 挑战

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

变位词是通过重新排列另一个单词或短语的字母而形成的单词或短语。例如,“listen” 是 “silent” 的变位词。在这个挑战中,你将被要求编写一个函数,用于检查两个字符串是否为彼此的变位词。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python/BasicConceptsGroup -.-> python/booleans("Booleans") python/BasicConceptsGroup -.-> python/comments("Comments") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") subgraph Lab Skills python/booleans -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/comments -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/conditional_statements -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/for_loops -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/tuples -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/function_definition -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/importing_modules -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/using_packages -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} python/standard_libraries -.-> lab-13666{{"变位词检查器:一个 Python 挑战"}} end

字符串变位词

编写一个函数 is_anagram(s1, s2),该函数接受两个字符串作为参数,如果它们是彼此的变位词,则返回 True,否则返回 False。该函数应不区分大小写,忽略空格、标点符号和特殊字符。

要解决此问题,你可以按以下步骤操作:

  1. 使用 str.isalnum() 过滤掉非字母数字字符,并使用 str.lower() 将每个字符转换为小写。
  2. 使用 collections.Counter 对每个字符串的结果字符进行计数,并比较结果。
from collections import Counter

def is_anagram(s1, s2):
  return Counter(
    c.lower() for c in s1 if c.isalnum()
  ) == Counter(
    c.lower() for c in s2 if c.isalnum()
  )
is_anagram('#anagram', 'Nag a ram!')  ## True

总结

在这个挑战中,你已经学会了如何检查两个字符串是否为彼此的变位词。你使用了 str.isalnum() 来过滤掉非字母数字字符,str.lower() 将每个字符转换为小写,以及 collections.Counter 对每个字符串的结果字符进行计数并比较结果。