- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建一个将字符串作为输入的函数,并检查该字符串是否为 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 测试中:
如果有剩余,那么测试字符串没有包含所有字母,所以它一定不是全字母组合。
测试字符串集中的任何空格、标点字符都不在字母表集中,因此它们无关紧要。
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/
这是我编写的全语法的函数。由于某种原因,alpha[num]采用a,c,e,g等而不是采用a,b,c,d,e等等 def ispangram(str1,alphabet=string.ascii_lo
Pangram是使用字母表中的每个字母至少一次的句子。 是否可以生成最短的Pangram来自给定的单词列表? 比方说,我有这样的单词列表 cat monkey temp banana christma
给定一个包含字母 a-z 至少一次的单词列表,你将如何编写一个程序来找到最短的 pangram按字符数(不计算空格)算作单词的组合? 由于我不确定是否存在简短答案,因此这不是代码高尔夫,而只是讨论您将
我正在尝试编写一个 REGEX 来测试 PANGRAM。我可以用传统的方式来做,但似乎无法用正则表达式解决超过 90% 的测试。 输入:字符串 输出:真||假的 function isPangram(
我想创建一个将字符串作为输入的函数,并检查该字符串是否为 pangram(pangram 是一段包含字母表中每个字母的文本)。 我编写了以下代码,该代码有效,但我正在寻找一种替代方法,希望是一种短路方
import java.io.*; import java.util.*; public class Solution { public static final int n = 26;
这是一个几乎正确的全字词程序,但我不明白为什么它不起作用? int main() { /* Enter your code here. Read input from STDIN. Print
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试为一组元素(字母表中的每个字母)设置正确的类。每个元素都有 id #alpha_0 到 #alpha_25。如果输入中的字母出现一次,则将该字母设置为绿色。如果字母出现不止一次,则将其设置为
恶作剧的念头让我想方设法找到完美的英语 Pangrams。我计划使用动态编程技术编写一个程序来尝试确定可能的完美 pangrams,除非其他人知道已经存在的 pangrams,或者能够为我提供已知的解
我厌倦了使用 Gimp 无休止地滚动所有字体来不规律地搜索完美字体,所以我想:“为什么不为每种字体构建一个可视的 pangrams 列表”。 因此,我尝试构建一个 php 脚本,该脚本在 .fonts
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
#include #include #include #include #define number_of_letters 26 bool IsPangram(char* string); int m
Pangram 是一个获取输入并检查它是否包含所有字母的函数,这是我使用 ASCII 代码的代码: function pangram(x) { var a; for (var i =
我试图通过在 Java 中使用 set 来确定字符串是否为 pangram 我试过下面的代码。现在输出显示不是 pangram,但它应该是 pangram。请告诉我我的解决方案有什么问题 //
这是如何运作的?它检查一个字符串是否至少包含一次从 a 到 z 的每个字符? import string def ispangram(str1, alphabet=string.ascii_lower
到目前为止,我已经想到了这个。我试图最小化字符串操作并将解决方案隔离到内置数据类型、数组和整数操作。 我正在寻找更优雅的方法来检查 pangram 字符串,在 java 中。 优雅,代码行最少,也欢迎
自枚举 pangrams 的 wiki 文章指出它们是使用二元决策图计算的。我一直在阅读有关 BDD 的文章,根据我的理解,您需要先将某个问题表示为 bool 函数,然后才能为其构建 BDD。 我该怎
我必须编写一个函数,它接受一个字符串并返回字符串中所有缺失的字母。下面的函数看起来很简单,但它没有返回任何东西。有什么提示吗? string getMissingLetters(const strin
我必须找出句子是 pangram(Pangram 是通过使用字母表中的每个字母至少一次构造的句子)或不是 因超时而终止。为什么我觉得没问题?怎么想的。我在 hackerrank 上使用这个。 请告诉我
我是一名优秀的程序员,十分优秀!