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
是一个 pangram,如果我们从字母开始,删除在测试字符串中找到的每个字母,所有的字母都会被删除。
解释
'lambda' 的使用是一种创建函数的方式,所以它是一行相当于写一个def
like:
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 值,那么具有内容的容器为“真”,而空容器为“假”。
所以我们not
用来检查“有没有剩余的东西?” 通过将结果强制为 True/False 值,具体取决于是否有任何剩余物。
not
还会更改 True -> False 和 False -> True。这在这里很有用,因为 (alphabet used up) -> 一个空集 is 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