gpt4 book ai didi

python - 如何检查字符串是否是 pangram?

转载 作者:太空狗 更新时间:2023-10-29 21:14:42 25 4
gpt4 key购买 nike

我想创建一个将字符串作为输入的函数,并检查该字符串是否为 pangram(pangram 是一段包含字母表中每个字母的文本)。

我编写了以下代码,该代码有效,但我正在寻找一种替代方法,希望是一种短路方法。

import string

def is_pangram (gram):
gram = gram.lower()
gram_list_old = sorted([c for c in gram if c != ' '])
gram_list = []
for c in gram_list_old:
if c not in gram_list:
gram_list.append(c)
if gram_list == list(string.ascii_lowercase): return True
else: return False

我觉得这个问题可能违反了本网站的规则,但希望不是。我只是好奇,希望看到其他方法来做到这一点。

最佳答案

is_pangram = lambda s: not set('abcdefghijklmnopqrstuvwxyz') - set(s.lower())

>>> is_pangram('abc')
False
>>> is_pangram('the quick brown fox jumps over the lazy dog')
True
>>> is_pangram('Does the quick brown fox jump over the lazy dog?')
True
>>> is_pangram('Do big jackdaws love my sphinx of quartz?')
True

Test string s is a pangram if we start with the alphabet, remove every letter found in the test string, and all the alphabet letters get removed.

解释

'lambda' 的使用是一种创建函数的方式,因此它相当于编写 def 的一行代码,例如:

 def is_pangram(s):
return not set('abcdefghijklmnopqrstuvwxyz') - set(s.lower())

set() 创建一个数据结构,其中不能有任何重复项,这里:

  • 第一组是(英文)英文字母,小写
  • 第二组是测试字符串中的字符,也是小写的。所有重复项也都消失了。

减去 set(..) - set(..) 返回第一组的内容,减去第二组的内容。 set('abcde') - set('ace') == set('bd')

在这个 pangram 测试中:

  • 我们将测试字符串中的字符从字母表中取出
  • 如果什么都没有,则测试字符串包含所有字母表中的字母,并且必须是 pangram。
  • 如果有剩余,那么测试字符串没有包含所有字母,所以它一定不是全字母组合。

  • 测试字符串集中的任何空格、标点字符都不在字母表集中,因此它们无关紧要。

set(..) - set(..) 将返回空集或包含内容的集。如果我们在 Python 中强制设置为最简单的 True/False 值,则有内容的容器为“True”,空容器为“False”。

所以我们使用 not 来检查“还有剩余的东西吗?”通过将结果强制为 True/False 值,具体取决于是否有剩余。

not 也会更改 True -> False 和 False -> True。这在这里很有用,因为 (alphabet used up) -> 一个空集,它是 False,但我们希望 is_pangram 返回 True案子。反之亦然,(字母表有一些剩余)-> 一组 True 的字母,但我们希望 is_pangram 返回 False那个。

然后返回 True/False 结果。

is_pangram = lambda s: not set('abcdefghijklmnopqrstuvwxyz') - set(s.lower())
# Test string `s`
#is a pangram if
# the alphabet letters
# minus
# the test string letters
# has NO leftovers

关于python - 如何检查字符串是否是 pangram?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com