פעולות על מחרוזות בפייתון

מחבר:
בתאריך:

שפת ה-Python כוללת שפע של פונקציות שתפקידן לטפל בטקסטים. פונקציות אילה הן פונקציות מחרוזת. בפייתון קיימות כמה עשרות פונקציות מחרוזת, ובמדריך זה אציג מספר פונקציות ופעולות שימושיות במיוחד.

פעולות על מחרוזות בפייתון

 

הפונקציה len

הפונקציה len מחזירה את האורך של מחרוזת:

str = 'Hello string functions'
 
# get the string length
print(len(str))
22

התוצאה היא 22 מפני שהפונקציה len סופרת את כל התווים, כולל הרווחים.

עכשיו בעברית:

str = 'שלום פונקציות מחרוזת'
 
# get the string length
print(len(str))

והתוצאה היא 20.

 

כיצד לגשת לתווים בתוך מחרוזת?

פייתון מתייחס למחרוזות כאל רצף ארוך של תווים. לכן, ניתן לגשת לפריטים בתוך המחרוזת באותו אופן שבו ניתן לגשת לפריטים בתוך מערך.

כדי לגשת לאחת האותיות של המחרוזת צריך לציין את מספר האינדקס שלה. לדוגמה, ניגש לאות הראשונה במחרוזת:

str = 'Hello string functions'
print(str[0])
H

נא לזכור! מחשבים מתחילים לספור מ-0. לכן נשתמש באינדקס שמספרו 0 כדי לגשת לאות הראשונה במחרוזת.

לפי אותו היגיון, כדי לגשת לאות השלישית נשתמש באינדקס שמספרו 2:

print(str[2])
l

כדי לספור מסוף המחרוזת נצטרך להשתמש באינדקסים שליליים. לדוגמה, האינדקס שמספרו מינוס 1 מתייחס לאות האחרונה של המחרוזת.

str = 'Hello string functions'
 
print(str[-1])
s
print(str[-5])
t

בניגוד למערכים, לא ניתן לשנות מחרוזות כי הם אובייקטים מסוג immutable שזה בעברית מדוברת "לא ניתן לשינוי". לכן אם ננסה לשנות אותם כמו שאנחנו עושים במערכים נקבל שגיאה :

str[0] = 'h'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object does not support item assignment

אז כפי שאפשר לראות אנחנו לא יכולים לשנות מחרוזת על ידי הצבה ישירה, אבל לא לדאוג קיימת פונקציה שמאפשרת לנו לשנות מחרוזות, ועל כך בסעיף הבא.

 

החלפת חלק במחרוזת ע"י replace

כפי שראינו, לא ניתן לשנות מחרוזת באופן ישיר. במקום זה נשתמש ב-replace.

str = 'Hello string functions'
new_str = str.replace('function', 'method')

את התוצאה של ההחלפה הצבנו לתוך משתנה חדש, new_str. נדפיס אותו:

print(new_str)
Hello string methods

כפי שניתן להציב את התוצאה של ההחלפה לתוך משתנה חדש, אפשר להציב את התוצאה לתוך המשתנה הישן.

str = 'Hello string functions'
str = str.replace('function', 'method')
print(str)
Hello string methods

למה אני יכול להחליף את המילה פונקציות במתודות? מפני שפונקציות המשתייכות לאובייקטים מכונות מתודות, והפונקציות שבהם אנחנו משתמשים כדי לשנות מחרוזות שייכות לאובייקט מחרוזת של פייתון.

רוצים לראות את כל פונקציות המחרוזת של פייתון? השתמשו בפקודה dir על אחת המחרוזות. למחרוזת שלנו במדריך קראנו str אז בואו נריץ עליה את הפקודה:

print(dir(str))

והתוצאה היא רשימה ארוכה של הפונקציות (מתודות) ותכונות שיש לאובייקט המחרוזת של פייתון להציע.

 

חיתוך (slicing) של מחרוזות

כיצד אנחנו יכולים להוציא חלק של המחרוזת? זה קל. כמו במערכים אנחנו יכולים להוסיף לסוגריים המרובעים עמדה נוספת כדי לציין את תחילת המחרוזת החתוכה כמו גם את סופה.

str = 'Hello string functions'
print(str[5:10])
 stri

שימו לב! החיתוך כולל את העמדה הפותחת ואינו כולל את העמדה הסוגרת. לפיכך, המחרוזת החתוכה כוללת את האינדקס שמספרו 5 אך אינה כוללת את האינדקס שמספרו 10.

ניתן להשמיט את העמדה הפותחת ואז פייתון מתחיל מתחילת המחרוזת ועד לעמדה הסוגרת:

print(str[:10])
Hello stri

ניתן להשמיט את העמדה הסוגרת ואז פייתון מתחיל מהאינדקס שציינו ומסיים בסוף המחרוזת:

print(str[5:])
 string functions

השמטה של העמדה הפותחת וגם של העמדה הסוגרת תיתן את המחרוזת כולה:

print(str[:])
Hello string functions

כמו שראינו לפני רגע, אפשר להשתמש במספרי אינדקס שליליים מה שגורם להתחלת הספירה מסוף המחרוזת.

print(str[-10:-5])
 func

 

פיצול מחרוזות למערכים באמצעות split

אנחנו יכולים לפצל מחרוזות למערכים סביב איזה תו שנרצה באמצעות הפונקציה split.

הפיצול הפשוט ביותר הוא סביב תווי רווח, לדוגמה:

str = 'Hello string functions'
print(str.split())
['Hello', 'string', 'functions']

הפיצול הוא לא רק סביב רווחים רגילים אלא סביב כל תו של רווח ('\n', '\r', '\t', '\f').

יתרה מכך, אנחנו יכולים לקבוע סביב איזה תו לפצל ע"י העברת פרמטר לפונקציה split. את המחרוזת הבאה נפצל סביב התו נקודותיים (:).

time_str = '18:34:25'
print(time_str.split(':'))
['18', '34', '25']

 

אותיות קטנות וגדולות

אנחנו יכולים להפוך את כל האותיות לקטנות ע"י הפונקציה lower.

# all to small letters
print(str.lower())

נעזר בפונקציה upper כדי להפוך את כל האותיות לגדולות.

# capitalize all
print(str.upper())

הפונקציה capitalize תהפוך את האות הראשונה במחרוזת לגדולה.

# capitalize the first letter in a string
print(str.capitalize())
str = 'hello String Functions'

print(str.lower()) # hello string functions
print(str.upper()) # HELLO STRING FUNCTIONS
print(str.capitalize()) # Hello string functions
print(str.lower().capitalize()) # Hello string functions

 

האם המחרוזת מכילה מחרוזת אחרת?

הפונקציה find תחזיר את האינדקס שבו מתחילה המחרוזת או -1 במקרה שלא נמצאה התאמה.

# returns the index where the match starts
# if it doesn't find a match it returns -1
str = 'hello String Functions'
str.find('func')

ננסה לראות את התוצאה במקרה של התאמה ובמקרה של חוסר התאמה.

str = 'hello string functions'

print(str.find('func')) # 13
print(str.find('Func')) # -1
print(str.find('dog')) # -1

 

חיבור מחרוזות (concatenation)

הדרך הפשוטה ביותר, אם כי לא המומלצת ביותר, לחבר מחרוזות היא באמצעות סימן + בין חלקי המחרוזת.

# concatenate multiple strings
greeting = 'hello'
name = 'dolly'
 
msg = greeting + name
 
print(msg)
hellodolly

התוצאה לא מכילה רווחים.

נוסיף את הרווחים על ידי הוספת פלוסים נוספים.

# concatenate multiple strings
greeting = 'hello'
name = 'dolly'
 
msg = greeting + ' ' + name + '!'
 
print(msg)
hello dolly!

אנחנו יכולים להשתמש בפלוסים כדי לחבר כמה חלקים שאנחנו רוצים למחרוזת אבל מהר מאוד זה יהפוך למסורבל. הפתרון הוא שימוש במחזיקי מקום:

msg = '{} {}!'.format(greeting, name)
 
print(msg)
hello dolly!

 

צירוף פריטים של מערך למחרוזת

אפשר להשתמש בלולאה כדי להפוך פריטים של מערך למחרוזת רציפה.

mylist = ['hello', 'string', 'functions'] 
str = "" 
for item in mylist: 
  str += item + ' '

print(str)
hello string functions

אבל אפשר לצרף פריטי מערך למחרוזת הרבה יותר בקלות באמצעות הפונקציה join.

str = ' '.join(['hello', 'string', 'functions'])

print(str)
hello string functions

 

חיבור מחרוזות באמצעות (f-strings)

בדומה לשימוש במחזיקי מקום, אנחנו יכולים להשתמש ב f-strings כדי לחבר מחרוזות.

msg = f'{greeting} {name}!'

כשאנחנו משתמשים ב f-strings אנחנו יכולים להוסיף לוגיקה פשוטה.

msg = f'{greeting.capitalize()
} {name.capitalize()}!'
 
print(msg)
Hello Dolly!

לכל המדריכים בסדרה ללימוד פייתון

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 3 + 6