具有两个字符串的 Python 函数 - 子字谜

标签 python string

我想定义一个带有两个带有两个参数的字符串的函数。如果第一个字符串是第二个字符串的“子字谜”,我希望它返回 true。仅当第一个字符串中的每个字母在第二个字符串中出现的次数至少相同时,该函数才应返回 true。 例如。键是键盘的“子字谜”,但鼠标不是。

这是我到目前为止的代码:

# -*- coding: utf-8 -*-
def anagram(str1,str2):
  # string to list
  str1 = list(str1.lower())
  str2 = list(str2.lower())

  #sort list
  str1.sort()
  str2.sort()

  #join list back to string
  str1 = ''.join(str1)
  str2 = ''.join(str2)

  return str1 == str2

print(anagram('trainers', 'strainer'))

到目前为止,如果两个字符串都是精确的字谜词,它将返回 true,并且我不知道如何更改它。

谢谢

最佳答案

正如 @achampion 提到的,Counter 是解决此问题的最佳方法。检查字符串 a 是否包含构成字符串 b 的所有字符:

from collections import Counter

def contains_anagram(a, b):
    a = Counter(a)
    b = Counter(b)
    return all(b[letter] <= a[letter] for letter in b)

关于具有两个字符串的 Python 函数 - 子字谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40393859/

相关文章:

python - 以 'r+' 模式打开文件会给出奇怪的输出

python - 如何查找字符串中某个字符所有出现的索引?

c# - 如何使用模式从字符串中获取字符串列表?

r - 提取字符串中最长的单词

swift - 如何将字符串转换为 UIColor (Swift)

python - 这行代码中的[0]是什么意思?

python - 如何阻止 Django/PSQL 在创建失败时自动递增表 ID

python - 与python一起使用的时间序列数据库

python - 使用 sklearn 进行高斯朴素贝叶斯分类的数据类型,如何清理数据

python - 如何在 Python 3 中键入提示生成器?