آموزش پایتون - برش رشته‌ها

اسلایس کردن رشته (String slicing) در پایتون روشی برای ایجاد یک زیررشته از یک رشته داده‌شده است. در این فرآیند، ما بخشی یا تکه‌ای از یک رشته را استخراج می‌کنیم. معمولاً برای انجام اسلایس روی رشته در پایتون، از اپراتور اسلایس "[ : ]" استفاده می‌کنیم. قبل از پرداختن به اسلایس کردن رشته، بیایید ایندکس‌گذاری رشته‌ها را درک کنیم.

در پایتون، یک رشته ترتیبی مشخص از کاراکترهای یونیکد است. هر کاراکتر در رشته دارای یک ایندکس منحصر‌به‌فرد در این ترتیب است. ایندکس از 0 شروع می‌شود. اولین کاراکتر در رشته دارای ایندکس موقعیتی 0 است. ایندکس به سمت انتهای رشته افزایش می‌یابد.

اگر یک متغیر رشته‌ای به‌صورت var="HELLO PYTHON" تعریف شود، ایندکس هر کاراکتر در رشته به‌صورت زیر خواهد بود −

string index representation

ایندکس‌گذاری رشته در پایتون

پایتون به شما امکان می‌دهد با استفاده از ایندکس، به هر کاراکتر تکی از رشته دسترسی داشته باشید. در این حالت، 0 کران پایین و 11 کران بالای رشته است. بنابراین، var[0] مقدار H و var[6] مقدار P را برمی‌گرداند. اگر ایندکس داخل کروشه از کران بالا فراتر رود، پایتون خطای IndexError رخ می‌دهد.

مثال

در مثال زیر، با استفاده از ایندکس به کاراکترهای یک رشته دسترسی پیدا می‌کنیم.

var = "HELLO PYTHON"
print(var[0]) 
print(var[7])  
print(var[11])  
print(var[12]) 

با اجرای کد، خروجی زیر تولید خواهد شد −

H
Y
N
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 5, in <module>
IndexError: string index out of range

ایندکس‌گذاری مثبت و منفی رشته در پایتون

یکی از ویژگی‌های منحصر‌به‌فرد انواع دنباله در پایتون (و در نتیجه شیء رشته)، داشتن طرح ایندکس‌گذاری منفی است. در مثال بالا، از طرح ایندکس‌گذاری مثبت استفاده شد که در آن ایندکس از چپ به راست افزایش می‌یابد. در صورت استفاده از ایندکس‌گذاری منفی، کاراکتر انتهایی دارای ایندکس -1 است و ایندکس از راست به چپ کاهش می‌یابد؛ در نتیجه اولین کاراکتر یعنی H دارای ایندکس -12 خواهد بود.

positive negative indexing

مثال

بیایید از ایندکس‌گذاری منفی برای استخراج کاراکترهای N، Y و H استفاده کنیم.

var = "HELLO PYTHON"
print(var[-1]) 
print(var[-5])  
print(var[-12])  

با اجرای کد بالا، نتیجه زیر حاصل می‌شود −

N
Y
H

بنابراین می‌توانیم از ایندکس مثبت یا منفی برای بازیابی یک کاراکتر از رشته استفاده کنیم.

در پایتون، رشته یک شیء غیرقابل تغییر (immutable) است. یک شیء زمانی غیرقابل تغییر است که نتوان آن را پس از ذخیره در یک موقعیت حافظه خاص، در همان جا تغییر داد. شما می‌توانید هر کاراکتری را با کمک ایندکس آن از رشته بازیابی کنید، اما نمی‌توانید آن را با کاراکتر دیگری جایگزین کنید.

مثال

در مثال زیر، کاراکتر Y در ایندکس 7 در HELLO PYTHON قرار دارد. تلاش کنید Y را با y جایگزین کنید و ببینید چه اتفاقی می‌افتد.

var="HELLO PYTHON"
var[7]="y"
print (var)

این کد خروجی زیر را تولید خواهد کرد −

Traceback (most recent call last):
 File "C:\Users\users\example.py", line 2, in <module>
  var[7]="y"
  ~~~^^^
TypeError: 'str' object does not support item assignment

خطای TypeError به این دلیل است که رشته غیرقابل تغییر است.

اسلایس کردن رشته در پایتون

پایتون علامت ":" را به عنوان اپراتور اسلایس کردن رشته تعریف می‌کند. این اپراتور یک زیررشته از رشته اصلی برمی‌گرداند. کاربرد کلی آن به صورت زیر است −

substr=var[x:y]

اپراتور ":" به دو عملوند صحیح نیاز دارد (که همان‌طور در مثال‌های بعدی خواهیم دید، هر دو می‌توانند حذف شوند). عملوند اول x ایندکس اولین کاراکتر از اسلایس مورد نظر است. عملوند دوم y ایندکس کاراکتر بعد از آخرین کاراکتر در رشته مورد نظر است. بنابراین var[x:y] کاراکترهای از موقعیت xام تا موقعیت (y-1)ام را از رشته اصلی جدا می‌کند.

مثال

var="HELLO PYTHON"

print ("var:",var)
print ("var[3:8]:", var[3:8])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[3:8]: LO PY

اسلایس کردن رشته در پایتون با ایندکس‌گذاری منفی

مانند ایندکس‌های مثبت، از ایندکس‌های منفی نیز می‌توان برای اسلایس کردن استفاده کرد.

مثال

مثال زیر نحوه اسلایس کردن یک رشته با استفاده از ایندکس‌های منفی را نشان می‌دهد.

var="HELLO PYTHON"
print ("var:",var)
print ("var[3:8]:", var[3:8])
print ("var[-9:-4]:", var[-9:-4])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[3:8]: LO PY
var[-9:-4]: LO PY

مقادیر پیش‌فرض ایندکس‌ها در اسلایس کردن رشته

هر دو عملوند برای اپراتور اسلایس پایتون اختیاری هستند. عملوند اول به طور پیش‌فرض صفر است، به این معنی که اگر عملوند اول را وارد نکنیم، اسلایس از کاراکتر موجود در ایندکس 0ام یعنی اولین کاراکتر شروع می‌شود. این حالت چپ‌ترین زیررشته را تا کاراکترهای "y-1" اسلایس می‌کند.

مثال

در این مثال، ما عملیات اسلایس را با استفاده از مقادیر پیش‌فرض انجام می‌دهیم.

var="HELLO PYTHON"
print ("var:",var)
print ("var[0:5]:", var[0:5])
print ("var[:5]:", var[:5])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[0:5]: HELLO
var[:5]: HELLO

مثال

به همین ترتیب، عملوند y نیز اختیاری است. به طور پیش‌فرض مقدار آن "-1" است، به این معنی که رشته از موقعیت xام تا انتهای رشته اسلایس خواهد شد.

var="HELLO PYTHON"
print ("var:",var)
print ("var[6:12]:", var[6:12])
print ("var[6:]:", var[6:])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[6:12]: PYTHON
var[6:]: PYTHON

مثال

طبیعتاً اگر از هیچ‌کدام از عملوندها استفاده نشود، اسلایس برابر با رشته اصلی خواهد بود. زیرا به طور پیش‌فرض "x" برابر با 0 و "y" برابر با آخرین ایندکس + 1 (یا -1) است.

var="HELLO PYTHON"
print ("var:",var)
print ("var[0:12]:", var[0:12])
print ("var[:]:", var[:])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[0:12]: HELLO PYTHON
var[:]: HELLO PYTHON

مثال

برای دریافت زیررشته‌ای از رشته اصلی، عملوند سمت چپ باید کوچک‌تر از عملوند سمت راست باشد. اگر عملوند سمت چپ بزرگ‌تر باشد، پایتون هیچ خطایی رخ نمی‌دهد، اما یک رشته تهی برمی‌گرداند.

var="HELLO PYTHON"
print ("var:",var)
print ("var[-1:7]:", var[-1:7])
print ("var[7:0]:", var[7:0])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[-1:7]:
var[7:0]:

نوع بازگشتی اسلایس کردن رشته

اسلایس کردن یک رشته جدید برمی‌گرداند. شما می‌توانید به‌راحتی عملیات‌های رشته‌ای مانند الحاق یا اسلایس مجدد را روی رشته اسلایس‌شده انجام دهید.

مثال

var="HELLO PYTHON"

print ("var:",var)
print ("var[:6][:2]:", var[:6][:2])

var1=var[:6]
print ("slice:", var1)
print ("var1[:2]:", var1[:2])

این کد خروجی زیر را تولید خواهد کرد −

var: HELLO PYTHON
var[:6][:2]: HE
slice: HELLO
var1[:2]: HE

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.