Python-programmer på strengoperasjoner

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.

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.
  Skjul/Vis skrivebordsikoner på OS X med terminalkommando

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 [start: stop: step] returnerer et stykke av strengen fra start til men ikke inkludert stopp, med trinnstørrelsestrinn.

  • 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.

[::-1] returnerer en omvendt kopi av strengen.

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.

  Hvordan skjule feilverdier og indikatorer i Microsoft Excel

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.

  Deaktiver og koble fra kontoen din på uønskede enheter i Netlifx

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.

.istitle() returnerer True hvis strengen er formatert i tittelen, ellers returnerer den False.

  • 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!🎉