【问题标题】:Python function with two strings - sub-anagram具有两个字符串的 Python 函数 - 子字谜
【发布时间】:2017-03-16 14:04:49
【问题描述】:

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

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

# -*- 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,我不知道如何更改它。

谢谢

【问题讨论】:

  • Python 在标准的collections 模块中有一个非常方便的类Counterreturn Counter(str1.lower()) == Counter(str2.lower())
  • 这是一个很好的建议,但 == 不适用于 OP 的示例(Counter("key") 不等于 Counter("keyboard")。但这个想法非常好(只需要确保第二个中的计数等于或大于第一个中的计数)
  • 你说得对,我没有仔细阅读 - 只看到了代码示例...
  • @Rsrichdude098,请记住,如果任何答案解决了您的问题,最好将其标记为已接受(答案左侧的大复选框)。它会给你声誉积分,它会给花时间回答它的人声誉积分,最重要的是,它会帮助未来的读者看到答案是有帮助的。请看一下:meta.stackexchange.com/questions/5234/…(不仅是这篇文章,还有你未来的问题)干杯 :-)

标签: python string


【解决方案1】:

正如@champion 所提到的,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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 2018-06-07
    • 2017-12-04
    • 2015-05-25
    • 2016-06-24
    • 1970-01-01
    • 2020-10-28
    • 2015-11-11
    相关资源
    最近更新 更多