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
测试串s
如果我们从字母表开始,删除测试字符串中找到的每个字母,并且所有字母表字母都被删除,那么这是一个全字母表。
解释
使用“lambda”是创建函数的一种方式,因此一行相当于编写def
like:
def is_pangram(s):
return not set('abcdefghijklmnopqrstuvwxyz') - set(s.lower())
set()
创建一个数据结构,其中不能有任何重复项,这里:
- 第一组是(英文)字母,小写
- 第二组是测试字符串中的字符,也是小写的。所有的重复项也都消失了。
减去类似的东西set(..) - set(..)
返回第一组的内容减去第二组的内容。set('abcde') - set('ace') == set('bd')
.
在此全语法测试中:
set(..) - set(..)
将返回一个空集,或一个包含内容的集。如果我们在 Python 中强制设置为最简单的 True/False 值,则有内容的容器为“True”,空容器为“False”。
所以我们正在使用not
检查“还有剩余的东西吗?”通过强制结果为 True/False 值,具体取决于是否有剩余。
not
还会更改 True -> False 和 False -> True。这在这里很有用,因为(字母表用完)->一个空集,它是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