I denne opplæringen skal du skrive Python-programmer for å løse vanlige spørsmål om strengoperasjoner.
Du vil lære hvordan du sjekker om Python-strenger er palindromer, anagrammer og er i tittelkassen.
Innholdsfortegnelse
Python Strings: En rask gjennomgang
I Python er strenger kraftige innebygde datatyper. De kan lagre en sekvens av tegn.
Indeksering i Python Strings: Som alle Python iterables, er strenger også nullindeksert. Så de gyldige indeksene for en streng med lengde N er 0, 1, 2 opp til N – 1.
Python støtter også negativ indeksering for å få tilgang til elementer fra slutten av strengen. Så -1 er indeksen til det siste tegnet i strengen, -2 er indeksen til det nest siste tegnet i strengen, og så videre.
Uforanderlighet av Python-strenger: I tillegg er strenger i Python uforanderlige, så du kan ikke endre dem på plass. Du kan imidlertid kalle flere strengmetoder på dem og få kopier av strenger med ønsket resultat.
Nå som vi har gjennomgått det grunnleggende om Python-strenger, la oss fortsette å løse noen enkle, men interessante problemer.
La oss begynne.
Sjekk om en Python-streng er et palindrom
Problem: Gitt en Python-streng, sjekk om det er et palindrom eller ikke.
Hvis ja, returner True; ellers, returner False.
Så vårt første problem er å sjekke om en gitt streng er et palindrom eller ikke.
Et palindrom er en streng som leser det samme fra venstre til høyre så vel som fra høyre til venstre. La oss liste opp noen eksempler: racerbil, refer, level, madam, radar, og så videre.
Her er trinnene for å løse dette problemet:
- Skaff en omvendt kopi av strengen og lagre den i en annen variabel om nødvendig.
- Sammenlign verdiene til den opprinnelige strengen og den omvendte strengen.
- Hvis de er like, er strengen et palindrom. Så returner True, og stopp.
- Hvis originalen og den omvendte kopien ikke er like, er ikke strengen et palindrom. Så vi bør returnere False.
Nøkkeloperasjonen er å få en reversert kopi av strengen. I Python er det noen forskjellige måter du kan gjøre dette på.
Vi vil imidlertid gå gjennom to tilnærminger:
- Ved å bruke strengskjæring
- Bruke reversed()-funksjonen og join()-metoden
Hvordan reversere en Python-streng ved å bruke skjæring
Syntaksen
- Hvis du utelater start, starter skiven på begynnelsen av strengen.
- Hvis du ikke spesifiserer stoppindeksen, strekker skiven seg opp til slutten av strengen.
- Og negative verdier for trinn kan brukes til å returnere skiver som starter fra slutten av strengen.
Så
Følgende kodecelle inneholder definisjonen av funksjonen is_palindrome().
Den tar inn en streng som argument, og returnerer True eller False avhengig av om det er et palindrom eller ikke.
Her har vi brukt strengskjæring for å få en omvendt kopi av strengen.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
▶️ Nå som vi har definert funksjonen, kan vi gå videre og ringe med en hvilken som helst gyldig streng som argument.
is_palindrome("racecar") True
I kodecellen ovenfor er racerbil et palindrom. Så funksjonen is_palindrome() returnerer True som forventet.
Prøv nå å kalle funksjonen med en streng som ikke er et palindrom, for eksempel elv.
is_palindrome("river") False
Og som du kan se, returnerer den False, som er riktig. ✅
Hvordan reversere en Python-streng ved å bruke reversed() og join()
I Python kan du bruke join()-metoden sammen med reversed()-funksjonen for å reversere en streng.
- Reversed()-funksjonen returnerer en omvendt iterator gjennom tegnene i strengen.
- join()-metoden kan deretter brukes til å slå sammen disse tegnene i omvendt rekkefølge.
Ved å bruke metoden ovenfor kan du omskrive is_palindrome()-funksjonen som i kodecellen nedenfor.
def is_palindrome(this_str): rev_str="".join(reversed(this_str)) if (this_str == rev_str): return True else: return False
Du kan også bruke is_palindrome()-funksjonen i listeforståelse for å samle alle palindromer fra en lengre liste med strenger.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
Slik fungerer koden ovenfor:
- Gå gjennom str_list, ring is_palindrome() på hver streng.
- Hvis is_palindrome() returnerer True, legg til strengen i palindromlisten.
Som du kan se i utdataene ovenfor, er palindromer en liste over alle palindromiske strenger i str_list.
Sjekk om Two Python Strings er Anagrammer
Et annet populært spørsmål som du kan komme over i intervjuer er å sjekke om et par strenger str1 og str2 er anagrammer.
To strenger sies å være anagrammer hvis antall tegn i de to strengene er nøyaktig det samme. Dette betyr at du kan få en av strengene ved å permutere eller omorganisere tegnene i den andre strengen.
Eksempler på anagrammer inkluderer state-taste, save-vase, albue-below, og så videre.
Hvordan se etter anagrammer ved å bruke Counter Object i Python
En enkel og intuitiv måte er å beregne antall forekomster av hvert tegn i de to strengene. Og så sjekk om tellingene er like.
Dette kan gjøres desto lettere ved å bruke Counter-objektet fra itertools-modulen. De Disk objektet returnerer en Python-ordbok: med tegnene som tastene og tilsvarende teller som verdiene.
Tenk på strengene «lagre» og «vase» som vist nedenfor.
str1 = "save" str2 = "vase"
Her er c1 og c2 tellerobjekter som inneholder tegntellingene til strengene str1 og str2 henholdsvis.
from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True
c1 == c2 returnerer Sant ettersom str1 og str2 er anagrammer.
Ved å bruke denne logikken kan vi nå gå videre og definere funksjonen are_anagrams() med to parametere word1 og word2. I funksjonskroppen sjekker vi om Counter(ord1) == Counter(ord2).
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
▶️ For å bekrefte, kall are_anagrams() med str1, str2 som argumentene. Siden str1 og str2 er anagrammer («lagre» og «vase»), returnerer funksjonen True, som er riktig.
are_anagrams(str1, str2) True
Hvordan se etter anagrammer ved å bruke sorterte kopier av strenger
Det er en annen måte du kan gjøre dette på.
Hvis to strenger er anagrammer, er deres sorterte kopier like.
Så vi kan skrive om funksjonen are_anagrams() for å sjekke om den sorterte versjonen av str1 er den samme som den sorterte kopien av str2. Hvis de er like, så er de to strengene anagrammer; ellers er de ikke det.
Ved å bruke metoden ovenfor for å sjekke likheten til sorterte kopier, kan vi omskrive funksjonen are_anagrams() som følger.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
La oss nå gjøre noen funksjonsanrop.
- Strengene «elbow» og «below» er anagrammer og funksjonen are_anagrams() returnerer True.
- Og «state» og «tasted» er ikke anagrammer, og funksjonen returnerer False.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
Sjekk om en Python-streng er i tittelforbokstav
Her er vårt siste spørsmål for denne opplæringen.
Problem: Gitt en streng: en persons navn – med fornavn og etternavn.
Du må sjekke om den første bokstaven i både for- og etternavn er stor.
Denne typen store bokstaver hvor den første bokstaven i hvert ord er stor, kalles store og små bokstaver.
Så du må sjekke om navnet er i tittel:
1. Hvis ja, send ut en melding om at formateringen er i store og små bokstaver.
2. Ellers returner en kopi av strengen formatert i tittelen
- Python har en innebygd strengmetode istitle(), som sjekker om en streng er i tittelen.
- Og Pythons strengmetode title() returnerer en kopi av strengen formatert i tittelen.
Så nå kan du bruke disse to metodene for å løse problemet.
Definer en funksjon check_titlecase() som godtar navn som argument.
- Du kan kalle istitle()-metoden på inndatastrengen for å sjekke om den er formatert med store og små bokstaver.
- Hvis True, kan du skrive ut at strengen allerede er i tittel.
- Ellers kan du kalle title()-metoden og returnere en kopi av strengen i tittelen.
Følgende kodecelle viser definisjonen av check_titlecase()-funksjonen.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
La oss nå kalle check_titlecase()-metoden med et argument.
check_titlecase("jane smith") # Output Jane Smith
I utgangen ovenfor kan du se at strengen «Jane Smith» nå er i tittelen.
▶️ La oss ta et annet eksempel.
check_titlecase("agatha Christie") # Output Agatha Christie
Denne gangen, la oss kalle funksjonen med en tittelstreng.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
Vi får beskjed om at strengen er formatert i tittelen, og funksjonen fungerer som forventet.
Konklusjon 👩🏫
La oss nå oppsummere problemene vi har diskutert så langt.
- For å sjekke om en streng er et palindrom, sjekk om strengen og dens omvendte versjon er like. Du kan bruke strengskjæring eller innebygde metoder for å snu strenger.
- For å sjekke om to strenger er anagrammer, sjekk om deres sorterte kopier er like. Og for å sortere en streng, bruk den innebygde sorted()-funksjonen.
- For å bekrefte om et navn er i store og små bokstaver, bruk .istitle()-metoden for kontroll og .title()-metoden for å få en kopi av strengen med store bokstaver.
Jeg håper du likte denne opplæringen om Python-strenger. Som et neste trinn kan du lære hvordan du bruker listeforståelser i Python eller lære om ikke-lik-operatoren i Python.
Lykke til med læring og koding!🎉