Питхон програми за стринг операције

У овом водичу ћете писати Питхон програме за решавање често постављаних питања о операцијама са стринговима.

Научићете како да проверите да ли су Питхон стрингови палиндроми, анаграми и да ли су у наслову.

Питхон стрингс: Брзи преглед

У Питхон-у, стрингови су моћни уграђени типови података. Они могу да чувају низ знакова.

Индексирање у Питхон стринговима: Као и сви Питхон итерабле, стрингови су такође индексирани нула. Дакле, важећи индекси за низ дужине Н су 0, 1, 2 до Н – 1.

Питхон такође подржава негативно индексирање за приступ елементима са краја стринга. Дакле, -1 је индекс последњег карактера у низу, -2 је индекс претпоследњег знака у низу, итд.

Непроменљивост Питхон стрингова: Поред тога, низови у Питхон-у су непроменљиви, тако да их не можете мењати на месту. Међутим, на њима можете позвати неколико метода стрингова и добити копије стрингова са жељеним резултатом.

Сада када смо прегледали основе Питхон стрингова, хајде да наставимо са решавањем неких једноставних, али занимљивих проблема.

Почнимо.

Проверите да ли је Питхон стринг палиндром

Проблем: Дат је Питхон стринг, проверите да ли је то палиндром или не.

Ако јесте, вратите Труе; иначе, вратите Фалсе.

Дакле, наш први проблем је да проверимо да ли је дати низ палиндром или не.

Палиндром је низ који се чита исто с лева на десно као и с десна на лево. Хајде да наведемо неколико примера: тркачки аутомобил, упућивање, ниво, госпођа, радар итд.

Ево корака за решавање овог проблема:

  • Набавите обрнуту копију стринга и сачувајте је у другој променљивој, ако је потребно.
  • Упоредите вредности оригиналног стринга и обрнутог стринга.
  • Ако су једнаки, низ је палиндром. Зато врати Труе и престани.
  • Ако оригинална и обрнута копија нису једнаке, низ није палиндром. Дакле, требало би да вратимо Фалсе.

Кључна операција је да се добије обрнута копија стринга. У Питхон-у постоји неколико различитих начина на које то можете учинити.

  Како променити горњи банер ИоуТубе канала

Међутим, прећи ћемо на два приступа:

  • Коришћење сечења низова
  • Коришћење функције реверсед() и методе јоин().

Како преокренути Питхон стринг користећи сечење

Синтакса <ани_стр>[start: stop: step] враћа део стринга <ани_стр> од почетка до, али не укључујући стоп, са кораком величине корака.

  • Ако изоставите почетак, исечак почиње на почетку низа.
  • Ако не наведете стоп индекс, исечак се протеже до краја стринга.
  • И негативне вредности корака се могу користити за враћање резова почевши од краја низа.

Дакле, <ани_стр>[::-1] враћа обрнуту копију стринга.

Следећа ћелија кода садржи дефиницију функције ис_палиндроме().

Узима стринг као аргумент и враћа Тачно или Нетачно у зависности од тога да ли је палиндром или не.

Овде смо користили сечење стрингова да бисмо добили обрнуту копију стринга.

def is_palindrome(this_str):
  rev_str = this_str[::-1]
  if (this_str == rev_str):
    return True
  else:
    return False

▶ Сада када смо дефинисали функцију, можемо наставити и позвати са било којим важећим стрингом као аргументом.

is_palindrome("racecar")
True

У горњој кодној ћелији, тркачки аутомобил је палиндром. Дакле, функција ис_палиндроме() враћа Труе као што се очекивало.

Сада покушајте да позовете функцију са било којим низом који није палиндром, као што је ривер.

is_palindrome("river")
False

И као што видите, враћа Фалсе, што је тачно. ✅

Како да обрнете Питхон стринг користећи реверсед() и јоин()

У Питхон-у можете користити метод јоин() заједно са функцијом реверсед() да бисте преокренули низ.

  • Функција реверсед() враћа обрнути итератор кроз знакове у стрингу.
  • Затим се метода јоин() може користити за спајање тих знакова обрнутим редоследом.

Користећи горњу методу, можете поново написати функцију ис_палиндроме() као у ћелији кода испод.

def is_palindrome(this_str):
  rev_str="".join(reversed(this_str))
  if (this_str == rev_str):
    return True
  else:
    return False

Такође можете користити функцију ис_палиндроме() унутар разумевања листе да прикупите све палиндроме са дуже листе стрингова.

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# Output
['refer', 'level', '12321']

Ево како горњи код ради:

  • Пређите кроз стр_лист, позовите ис_палиндроме() на сваком стрингу.
  • Ако ис_палиндроме() врати Тачно, додајте стринг на листу палиндрома.

Као што можете видети у излазу изнад, палиндроми су листа свих палиндромских стрингова у стр_лист.

Проверите да ли су два Питхон низа анаграми

Још једно популарно питање на које можете наићи у интервјуима је да проверите да ли су пар стрингова стр1 и стр2 анаграми.

  Постаните краљ тигрова са овим 3Д Гоогле животињама и објектима

За два низа се каже да су анаграми ако је број знакова у два низа потпуно исти. То значи да можете добити један од низова тако што ћете променити или преуредити знакове у другом низу.

Примери анаграма укључују стање-укус, сачувај-ваза, лакат-испод и тако даље.

Како проверити анаграме користећи Цоунтер објекат у Питхон-у

Једноставан и интуитиван начин је да се израчуна број појављивања сваког знака у два низа. И онда проверите да ли су бројеви једнаки.

Ово се још лакше може урадити коришћењем објекта Цоунтер из модула итертоолс. Тхе Цоунтер објекат враћа Питхон речник: са знаковима као кључевима и одговарајућим бројачима као вредностима.

Размотрите низове „сачувај“ и „ваза“ као што је приказано испод.

str1 = "save"
str2 = "vase"

Овде су ц1 и ц2 објекти бројача који садрже број знакова стрингова стр1 и стр2 респективно.

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

ц1 == ц2 враћа Тачно јер су стр1 и стр2 анаграми.

Користећи ову логику, сада можемо да дефинишемо функцију аре_анаграмс() са два параметра ворд1 и ворд2. У телу функције проверавамо да ли је Цоунтер(ворд1) == Цоунтер(ворд2).

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶ Да бисте проверили, позовите аре_анаграмс() са стр1, стр2 као аргументима. Пошто су стр1 и стр2 анаграми („сачувај“ и „ваза“), функција враћа Тачно, што је тачно.

are_anagrams(str1, str2)
True

Како проверити анаграме користећи сортиране копије низова

Постоји још један начин на који то можете учинити.

Ако су два низа анаграми, онда су њихове сортиране копије једнаке.

Дакле, можемо да препишемо функцију аре_анаграмс() да проверимо да ли је сортирана верзија стр1 иста као сортирана копија стр2. Ако су једнаки, онда су два низа анаграми; иначе, нису.

Користећи горњу методу за проверу једнакости сортираних копија, можемо преписати функцију аре_анаграмс() на следећи начин.

def are_anagrams(word1, word2):
  if sorted(word1) ==  sorted(word2):
    return True
  else:
    return False

Хајде да сада направимо неколико позива функција.

  • Низови „лакат“ и „испод“ су анаграми, а функција аре_анаграмс() враћа Тачно.
  • А „стање“ и „дегустација“ нису анаграми, а функција враћа Фалсе.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

Проверите да ли је Питхон стринг у наслову

Ево нашег последњег питања за овај водич.

  Како да преузмете сопствене ИоуТубе видео записе

Проблем: Дат је низ: име особе—са именом и презименом.

Морате проверити да ли је почетно слово и имена и презимена велико.

Ова врста великих и малих слова у којој је почетно слово сваке речи написано великим словом назива се велико слово.

Дакле, морате да проверите да ли је име у наслову:

1. Ако јесте, испишите поруку да је форматирање у наслову.

2. У супротном, вратите копију стринга форматирану великим словима

  • Питхон има уграђени стринг метод иститле(), који проверава да ли се стринг налази у великом слову.

<стр>.иститле() враћа Тачно ако је стринг <стр> форматиран у великом слову, иначе враћа Фалсе.

  • А Пајтонов стринг метод титле() враћа копију стринга форматирану у великом слову.

Дакле, сада можете користити ове две методе да решите проблем.

Дефинишите функцију цхецк_титлецасе() која прихвата име као аргумент.

  • Можете позвати метод иститле() на улазном низу да бисте проверили да ли је форматиран у великим словима.
  • Ако је тачно, можете одштампати да је стринг већ у наслову.
  • У супротном, можете позвати методу титле() и вратити копију стринга у великом слову.

Следећа ћелија кода приказује дефиницију функције цхецк_титлецасе().

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}' is already formatted in title case.")
  else:
    return name.title()

Позовимо сада метод цхецк_титлецасе() са аргументом.

check_titlecase("jane smith")

# Output
Jane Smith

У горе наведеном излазу можете видети да је стринг „Јане Смитх“ сада у великом слову.

▶ Узмимо још један пример.

check_titlecase("agatha Christie")

# Output
Agatha Christie

Овај пут, позовимо функцију са стрингом у наслову.

check_titlecase("Grace Hopper")

# Output
'Grace Hopper' is already formatted in title case.

Добијамо обавештење да је стринг форматиран у великим словима и функција ради како се очекује.

Закључак 👩‍🏫

Сада да сумирамо проблеме о којима смо до сада разговарали.

  • Да бисте проверили да ли је стринг палиндром, проверите да ли су стринг и његова обрнута верзија једнаки. Можете користити резање низова или уграђене методе да бисте обрнули низове.
  • Да бисте проверили да ли су два низа анаграми, проверите да ли су њихове сортиране копије једнаке. А да бисте сортирали стринг, користите уграђену сортед() функцију.
  • Да бисте проверили да ли је име у наслову, користите метод .иститле() за проверу и метод .титле() да бисте добили копију стринга са великим словима у наслову.

Надам се да сте уживали у овом водичу о Питхон стринговима. Као следећи корак, научите како да користите разумевања листе у Питхон-у или научите о неједнаком оператору у Питхон-у.

Срећно учење и кодирање!🎉