2017-10-30 2 views
3

Wie funktioniert das? Es prüft, ob ein String jedes Zeichen von a-z mindestens einmal enthält.Erkennen, ob eine Zeichenfolge in Python ein Pangram ist

import string 

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

Dies ergibt Wahr zum Beispiel:

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

Ich kann es nur annehmen, ist etwas mit lexographical Bestellung zu tun, wie hier erwähnt, aber immer noch ein wenig verwirrt.

Comparing two lists using the greater than or less than operator

Wenn ich den Link in dieser Frage SO lesen:

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

Dort heißt es:

Sequenz Objekte auf andere Objekte mit der gleichen Sequenz verglichen werden kann Art. Der Vergleich verwendet lexikographische Reihenfolge: zuerst die ersten beiden Elemente werden verglichen, und wenn sie sich unterscheiden, bestimmt dies die Ergebnis des Vergleichs; Wenn sie gleich sind, werden die nächsten beiden Elemente verglichen usw., bis eine Sequenz erschöpft ist. Wenn zwei zu vergleichende Items selbst Sequenzen desselben Typs sind, wird der lexikographische Vergleich rekursiv durchgeführt. Wenn alle Elemente von zwei Sequenzen gleich sind, werden die Sequenzen als gleich betrachtet. Wenn eine Sequenz eine anfängliche Subsequenz der anderen Sequenz ist, ist die kürzere Sequenz die kleinere (kleinere) Sequenz. Lexikographische Bestellung für Zeichenfolgen verwendet die Unicode-Codepunktnummer, um einzelne Zeichen zu bestellen. Einige Beispiele für Vergleiche zwischen Sequenzen desselben Typs.

Aber das ist mir nicht klar.

+0

Haben Sie gelesen: https://docs.python.org/3/library/stdtypes.html#frozenset.issubset? – alfasin

+0

Ich habe jetzt, danke @alfasin – smackenzie

Antwort

6

Es ist ein set Betrieb, nicht list. Das entspricht,

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

< s = t

s.issubset (t)

Testen, ob jedes Element in s in t ist.

Siehe hier: https://docs.python.org/2/library/sets.html

Edit: Siehe hier für die aktuelle Version von Set. Obwohl in der alten Version (für Vergleiche) eine einfachere Erklärung gegeben wird.

+0

's.subsubset (t)' ist äquivalent zu 's <= t' siehe: https://docs.python.org/3/library/stdtypes.html#frozenset.issubset – alfasin

+0

@alfasin Es ist das selbe was in seinem Code verwendet wird. – Rockybilly

+0

Keine Ahnung, warum dies abgelehnt wurde. Das ist die richtige Antwort. – MFisherKDX

2

Nein. Es ist zwei sets vergleichen. Daher konvertiert es die Eingabezeichenfolge in Kleinbuchstaben und verwendet dann den Settyp von Python, um es mit der Menge der Kleinbuchstaben zu vergleichen.

Dies ist eine sehr nützliche (und schnelle) Technik zum Vergleichen zweier Listen, um zu sehen, welche Elemente sie gemeinsam haben/Unterschied.

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) 
Verwandte Themen