检测字符串是否是Python中的pangram

时间:2017-10-30 22:42:55

标签: python

这是如何工作的?它检查一个字符串是否至少包含一次来自a-z的每个字符?

import string

def ispangram(str1, alphabet=string.ascii_lowercase):  
    alphaset = set(alphabet)  
    return alphaset <= set(str1.lower()) 

这返回True,例如:

ispangram("The quick brown fox jumps over the lazy dog")

我只能假设它与这里所述的词法排序有关,但仍然有点困惑。

Comparing two lists using the greater than or less than operator

当我读到这个SO问题中的链接时:

https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-types

它说:

  

可以将序列对象与具有相同对象的其他对象进行比较   序列类型。比较使用词典排序:首先是   比较前两项,如果它们不同则决定了   比较结果;如果他们是平等的,接下来的两个项目是   比较,等等,直到任一序列耗尽。如果有两个项目   要比较的是它们本身的相同类型的序列,   词典比较是递归地进行的。如果所有的项目   两个序列比较相等,序列被认为是相等的。如果   一个序列是另一个序列的初始子序列,较短   序列是较小(较小)的序列。字典排序   字符串使用Unicode代码点编号来单独订购   字符。在序列之间进行比较的一些例子   类型。

但这对我来说并不清楚。

3 个答案:

答案 0 :(得分:6)

这是set操作,而不是list。这相当于,

alphaset.issubset(set(str1.lower()))
  

s&lt; = t

     

s.issubset(t)的

     

测试s中的每个元素是否都在t。

见这里: https://docs.python.org/2/library/sets.html

修改:请参阅此处了解Set的当前版本。虽然在旧版本中给出了更简单的解释(用于比较)。

答案 1 :(得分:2)

没有。它正在比较两个sets。所以它将输入字符串转换为小写,然后使用Python的set类型将其与小写字母集进行比较。

这是一种非常有用(快速)的技术,用于比较两个列表,以查看它们共有的成员/差异。

答案 2 :(得分:0)

def pangram(s):
alphabet = set('abcdefghijklmnopqrstuvwxyz')
s = s.replace(' ','').lower()
s= sorted(s)

count = {}

    #alphabet could be one sting within '' later sorted, but I just went straight to the point. 
    #After initializing my dictionary at null, we start the count    

for letter in s:
    if letter in count:
        count[letter] =[]
    else:
        count[letter] = 1

for letter in alphabet:
    if letter in count:
        count[letter] =[]
    else:
        count[letter] = 0
for letter in count:
    if count[letter]== 0:
        print (letter +' missing!')
print (count[letter]!= 0)