کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش رشته ها در پایتون



در این بخش از آموزش، به بحث در مورد محبوب ترین نوع داده‌ در پایتون، یعنی رشته (string) می‌پردازیم. رشته در پایتون مجموعه‌ای از کاراکترها است که با نقل قول تکی، نقل قول دوتایی یا نقل قول سه‌تایی احاطه شده‌اند. در پایتون، رشته‌ها می‌توانند با قرار دادن کاراکتر یا دنباله‌ای از کاراکترها در داخل نقل قول‌ها ایجاد شوند. پایتون به ما اجازه می‌دهد که از نقل قول تکی، نقل قول دوتایی یا نقل قول سه‌تایی برای ایجاد رشته استفاده کنیم. مثال زیر را در نظر بگیرید.

Str1 = "Hi Python !"

در اینجا، اگر نوع متغیر str را با استفاده از دستور زیر بررسی کنیم خروجی آن string خواهد بود:

print(type(Str1))
output
< class 'str' >

در پایتون، رشته‌ها به عنوان دنباله ای از کاراکترها مورد استفاده قرار می‌گیرند، به این معنا که پایتون از نوع دادهٔ کاراکتر پشتیبانی نمی‌کند؛ به جای اینکه یک کاراکتری مانند 'p' به عنوان نوع دادهٔ کاراکتر در نظر گرفته شود، به عنوان یک رشته با طول 1 تلقی می‌شود.


ایجاد رشته در پایتون

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

#Using single quotes  
str1 = 'Hello Python'  
print(str1)  
#Using double quotes  
str2 = "Hello Python"  
print(str2)  
  
#Using triple quotes  
str3 = '''''Triple quotes are generally used for  
    represent the multiline or 
    docstring'''   
print(str3)  
خروجی
Hello Python
Hello Python
Triple quotes are generally used for 
    represent the multiline or
    docstring

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

مانند زبان‌های دیگر، اندیس ‌گذاری رشته‌های پایتون نیز از صفر شروع می‌شود. به عنوان مثال، رشته "HELLO" به صورت زیر اندیس‌ گذاری می‌شود:


به مثال زیر توجه کنید :
str = "HELLO"  
print(str[0])  
print(str[1])  
print(str[2])  
print(str[3])  
print(str[4])  
# It returns the IndexError because 6th index doesn't exist  
print(str[6])
خروجی
H
E
L
L
O
IndexError: string index out of range

همانطور که در بالا مشاهده کردید از اپراتور slice یا برش ( [ ] ) برای دسترسی به یک کاراکتر از کاراکترهای یک رشته استفاده می‌شود. با این حال، ما می‌توانیم از اپراتور : (دونقطه) در پایتون برای دسترسی به مجموعه زیررشته های یک رشته (مجموعه کاراکتر های یک رشته) استفاده کنیم. مثال زیر را در نظر بگیرید:

در اینجا باید توجه داشته باشیم که محدوده بالا (upper range) که در اپراتور برش استفاده می‌شود همیشه منحصر به فرد است، به عبارت دیگر اگر 'str = 'HELLO داده شود، آنگاه [1:3]str همیشه شامل str[1] = 'E'، 'str[2] = 'L خواهد بود. مثال زیر را در نظر بگیرید.

# Given String  
str = "JAVATPOINT"  
# Start Oth index to end  
print(str[0:])  
# Starts 1th index to 4th index  
print(str[1:5])  
# Starts 2nd index to 3rd index  
print(str[2:4])  
# Starts 0th to 2nd index  
print(str[:3])  
#Starts 4th to 6th index  
print(str[4:7])  
خروجی
JAVATPOINT
AVAT
VA
JAV
TPO

در رشته می توانیم از برش منفی (negative slicing) نیز استفاده کنیم؛ این برش از کاراکتر سمت راست شروع می‌شود و به عنوان 1- نشان داده می‌شود. دومین اندیس از سمت راست با 2- نشان داده شده و همینطور ادامه پیدا می‌کند. به تصویر زیر توجه کنید.

مثال زیر را در نظر بگیرید
str = 'JAVATPOINT'  
print(str[-1])  
print(str[-3])  
print(str[-2:])  
print(str[-4:-1])  
print(str[-7:-2])  
# Reversing the given string  
print(str[::-1])  
print(str[-12])  
خروجی
T
I
NT
OIN
ATPOI
TNIOPTAVAJ
IndexError: string index out of range

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

str = "HELLO"    
str[0] = "h"    
print(str)    
خروجی
Traceback (most recent call last):
  File "12.py", line 2, in 
    str[0] = "h";
TypeError: 'str' object does not support item assignment

با این حال، در مثال قبل، رشته str می‌تواند به طور کامل به یک محتوای جدید اختصاص داده شود، به مثال زیر توجه کنید:

str = "HELLO"    
print(str)    
str = "hello"    
print(str)  
خروجی
HELLO
hello  

همانطور که می‌دانیم، رشته‌ها در پایتون قابل تغییر نیستند. نمی‌توانیم کاراکترها را از رشته حذف کنیم. اما می‌توانیم از واژه کلیدی `del` برای حذف کل رشته استفاده کنیم. مثال زیر را در نظر بگیرید.

خروجی
str = "JAVATPOINT"  
del str[1]  
خروجی
TypeError: 'str' object doesn't support item deletion
حذف کل رشته :
str1 = "JAVATPOINT"  
del str1  
print(str1)  
خروجی
NameError: name 'str1' is not defined

عملگرهای رشته در پایتون

عملگر
توضیح
+
این عملگر به عنوان عملگر اتصال (concatenation) شناخته می‌شود و برای اتصال دو رشته استفاده می‌شود
*
این عملگر به عنوان عملگر تکرار شناخته می‌شود. این عملگر چندین کپی از یک رشته مشخص را به هم می‌چسباند.
[]
این عملگر به عنوان اپراتور برش (slice) شناخته می‌شود و برای دسترسی به کاراکتر خاص یک از رشته استفاده می‌شود.
[ : ]
این عملگر به عنوان اپراتور برش در یک محدوده مشخص(range slice) شناخته می‌شود و برای دسترسی به کاراکترهای یک رشته و در یک محدوده مشخص شده استفاده می‌شود.
in
این عملگر به عنوان اپراتور عضویت شناخته می‌شود و بررسی می کند که آیا کاراکتر مدنظر در رشته مدنظر وجود دارد یا خیر. در صورت موجود بودن کاراکتر مشخص شده در رشته ی مورد نظر، trueبرمی گرداند.
not in
مانند in، یک اپراتور عضویت است و دقیقاً معکوس in عمل می‌کند. در صورت عدم وجود کاراکتر مورد نظر در رشته، true برمی گرداند.
r/R
برای مشخص کردن یک رشته به عنوان یک رشته خام (raw string) استفاده می‌شود. رشته‌های خام در مواردی که نیاز به چاپ معنای واقعی کاراکترهای خروجی مانند "C://python" باشد، مورد استفاده قرار می‌گیرند.
%
برای انجام فرمت‌دهی رشته (string formatting) استفاده می‌شود. در مورد این عملگر بیشتر صحبت خواهیم کرد
برای درک واقعی از عملکرد و نحوه استفاده از عملگرهای پایتون، به مثال زیر توجه کنید:
str = "Hello"     
str1 = " world"    
print(str*3) # prints HelloHelloHello    
print(str+str1)# prints Hello world     
print(str[4]) # prints o                
print(str[2:4]); # prints ll                    
print('w' in str) # prints false as w is not present in str    
print('wo' not in str1) # prints false as wo is present in str1.     
print(r'C://python37') # prints C://python37 as it is written    
print("The string str : %s"%(str)) # prints The string str : Hello     
خروجی
HelloHelloHello
Hello world
o
ll
False
False
C://python37
The string str : Hello

فرمت‌دهی رشته در پایتون (دنباله های فرار)

فرض کنید نیاز داریم متنی را به شکل زیر بنویسیم:

 "They said, "Hello what's going on?" 
str = "They said, "Hello what's going on?""  
print(str)  
خروجی
SyntaxError: invalid syntax

یکی از راه های حل این مشکل استفاده از نقل قول سه‌تایی است، اما پایتون دنباله‌های فرار (escape sequence) را نیز فراهم کرده است. علامت (/) نماد دنباله‌های خروجی است. این علامت می‌تواند پس از یک کاراکتر ویژه قرار گیرد و به صورت متفاوت تفسیر شود. نقل قول تکی داخل رشته باید از طریق این دنباله فرار به تصویر کشیده شود. می‌توانیم همان اقدام را برای نقل قول دوتایی نیز انجام دهیم. به مثال زیر توجه کنید.

# using triple quotes  
print('''''They said, "What's there?"''')  
  
# escaping single quotes  
print('They said, "What\'s going on?"')  
  
# escaping double quotes  
print("They said, \"What's going on?\"")  
خروجی
They said, "What's there?"
They said, "What's going on?"
They said, "What's going on?"
لیست دنباله‌های خروجی به شرح زیر است:
دنباله
توضیح
مثال
\newline
نادیده گرفتن خط جدید
print("Python1 \
Python2 \
Python3")
Output:
Python1 Python2 Python3
\\
Backslash
print("\\")
Output:
\
\'
Single Quotes
print('\'')
Output:
'
\\''
Double Quotes
print("\"")
Output:
"
\a
ASCII Bell
print("\a")
\b
ASCII Backspace(BS)
print("Hello \b World")
Output:
Hello World
\f
ASCII Formfeed
print("Hello \f World!")
Output:
Hello  World!
\n
ASCII Linefeed
print("Hello \n World!")
Output:
Hello
 World!
\r
ASCII Carriege Return(CR)
print("Hello \r World!")
Output:
World!
\t
ASCII Horizontal Tab
print("Hello \t World!")
Output:
Hello   World!
\v
ASCII Vertical Tab
print("Hello \v World!")
Output:
Hello 
 World!
\ooo
Character with octal value
print("\110\145\154\154\157")
Output:
Hello
\xHH
Character with hex value.
print("\x48\x65\x6c\x6c\x6f")
Output:
Hello
در اینجا یک مثال ساده از دنباله‌های فرار داریم :
print("C:\\Users\\DEVANSH SHARMA\\Python32\\Lib")  
print("This is the \n multiline quotes")  
print("This is \x48\x45\x58 representation")  
خروجی
C:\Users\DEVANSH SHARMA\Python32\Lib
This is the 
 multiline quotes
This is HEX representation

با استفاده از رشته خام می‌توانیم از دنباله‌های فرار در رشته داده شده صرف نظر کنیم این کار را می‌توانیم با نوشتن r یا R در ابتدای رشته انجام دهیم. به مثال زیر توجه کنید

print(r"C:\\Users\\DEVANSH SHARMA\\Python32")  
خروجی
C:\\Users\\DEVANSH SHARMA\\Python32

متد format در پایتون

متد format، انعطاف‌پذیرترین و مفیدترین متد در قالب‌بندی رشته‌هاست. پرانتزها { } به عنوان نگهدارنده در رشته استفاده می‌شوند و توسط آرگومان‌های متد format جایگزین می‌شوند. نگاهی به مثال زیر بیندازید:

# Using Curly braces  
print("{} and {} both are the best friend".format("Devansh","Abhishek"))  
  
#Positional Argument  
print("{1} and {0} best players ".format("Virat","Rohit"))  
  
#Keyword Argument  
print("{a},{b},{c}".format(a = "James", b = "Peter", c = "Ricky"))  
خروجی
Devansh and Abhishek both are the best friend
Rohit and Virat best players
James,Peter,Ricky

توابع رشته در پایتون

پایتون از توابع داخلی مختلفی برای کنترل رشته‌ها استفاده می‌کند. در جدول زیر به آن ها اشاره می کنیم:

متد
توضیح
capitalize()
این تابع اولین حرف رشته را به حروف بزرگ تبدیل می‌کند. این تابع در پایتون 3 قابل استفاده نیست
casefold()
این تابع نسخه ای از رشته را که برای مقایسه بدون توجه به حروف بزرگ یا کوچک مناسب است، برمی گرداند
center(width ,fillchar)
این تابع دو ورودی می پذیرد؛ اولی طول رشته و دومی کاراکتری که در هر دو طرف رشته پر می کند، را مشخص می کند. سپس رشته را در وسط یا مرکز قرار می دهد.
count(string,begin,end)
این تابع تعداد تکرار یک زیررشته در یک رشته را بین دو اندیس مشخص شده حساب می‌کند.
encode()
این تابع رشته را با استفاده از کدک ثبت‌شده برای رمزگذاری تبدیل می‌کند.
endswith(suffix ,begin=0,end=len(string))
این تابع یک مقدار منطقی برمی‌گرداند که نشان‌دهنده این است که رشته با پسوند داده‌شده بین دو اندیس مشخص شده به پایان می‌رسد یا خیر.
expandtabs(tabsize = 8)
این تابع تب‌ها را در رشته به تعداد فاصله‌ها گسترش می‌دهد. مقدار پیش‌فرض برای فاصله 8 است.
find(substring ,beginIndex, endIndex)
این تابع مقدار ایندکس اولین تطابق زیررشته را که بین ایندکس شروع و پایان قرار دارد، بازمی‌گرداند
format(value)
این تابع یک نسخه قالب‌بندی‌شده از رشته با استفاده از مقدار داده‌شده را بازمی‌گرداند.
index(subsring, beginIndex, endIndex)
این تابع مانند تابع find عمل می‌کند، اما اگر زیررشته یافت نشود، یک خطا روی می دهد.
isalnum()
این تابع اگر کاراکترهای رشته حاوی حروف الفبا یا اعداد باشند و حداقل یک کاراکتر وجود داشته باشد، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
isalpha()
این تابع اگر تمام کاراکترهای رشته حروف الفبا باشند و حداقل یک کاراکتر وجود داشته باشد، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
isdecimal()
این تابع اگر تمام کاراکترهای رشته اعداد دسیمال باشند، مقدار درست (True) را بازمی‌گرداند.
isdigit()
این تابع اگر تمام کاراکترهای رشته اعداد باشند و حداقل یک کاراکتر وجود داشته باشد، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
isidentifier()
این تابع اگر رشته یک شناسه (identifier) معتبر باشد، مقدار درست (True) را بازمی‌گرداند.
islower()
این تابع اگر کاراکترهای رشته همگی با حروف کوچک نوشته شده باشند، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
isnumeric()
این تابع اگر رشته فقط حاوی کاراکترهای عددی باشد، مقدار درست (True) را بازمی‌گرداند.
isprintable()
این تابع اگر همه کاراکترهای رشته چاپ‌پذیر یا رشته خالی باشد، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
isupper()
این تابع اگر حروف رشته به حروف بزرگ نوشته شده باشند، مقدار درست (true) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
isspace()
این تابع اگر کاراکترهای رشته همگی فاصله سفید باشند، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند.
istitle()
این تابع اگر رشته به درستی به صورت عنوان نوشته شده باشد، مقدار درست (True) را بازمی‌گرداند؛ در غیر این صورت، مقدار غلط (False) را بازمی‌گرداند. یک رشته عنوان، رشته‌ای است که حرف اول آن با حروف بزرگ نوشته شده باشد و بقیه حروف با حروف کوچک نوشته شده باشند.
join(seq)
این تابع رشته‌های نمایش داده شده از دنباله داده شده را ادغام می‌کند.
len(string)
این تابع طول یک رشته را بازمی‌گرداند.
ljust(width[,fillchar])
این تابع یک رشته فاصله‌پر با اندازه اصلی رشته، از چپ چین شده و با اندازه مشخص شده از چپ بازمی‌گرداند.
lower()
این تابع تمام کاراکترهای یک رشته را به حروف کوچک تبدیل می‌کند.
lstrip()
این تابع تمام فاصله‌های سفید ابتدایی یک رشته را حذف می‌کند و همچنین می‌تواند برای حذف یک کاراکتر خاص از ابتدای رشته استفاده شود.
partition()
این تابع برای جستجوی جداکننده (`sep`) در رشته (`S`) استفاده می‌شود و بخش قبل از آن، خود جداکننده، و بخش بعد از آن را بازمی‌گرداند. اگر جداکننده پیدا نشود، رشته اصلی (`S`) همراه با دو رشته خالی بازمی‌گردد.
maketrans()
این تابع یک جدول ترجمه را بازمی‌گرداند که برای استفاده در تابع `translate` مورد استفاده قرار می‌گیرد.
replace(old,new[,count])
این تابع دنباله قدیمی از کاراکترها را با دنباله جدید جایگزین می‌کند. تعداد حداکثر کاراکترهای جایگزین شده اگر `max` مشخص شده باشد، اجرا می‌شود.
rfind(str,beg=0,end=len(str))
این تابع مشابه تابع find است اما رشته را به جهت معکوس (عقب‌تر به جلو) جستجو می‌کند.
rindex(str,beg=0,end=len(str))
این تابع مشابه تابع index است اما رشته را به جهت معکوس (عقب‌تر به جلو) جستجو می‌کند.
rjust(width,[,fillchar])
این تابع یک رشته فاصله‌پر ایجاد می‌کند که رشته اصلی به سمت راست به تعداد کاراکترهای مشخص شده چیده شده است.
rstrip()
این تابع تمام فاصله‌های سفید انتهایی یک رشته را حذف می‌کند و همچنین می‌تواند برای حذف یک کاراکتر خاص از انتهای رشته استفاده شود.
rsplit(sep=None, maxsplit = -1)
این تابع مشابه تابع split است اما رشته را از جهت عقب (پس‌رو) پردازش می‌کند. این تابع لیستی از کلمات در رشته را بازمی‌گرداند. اگر جداکننده مشخص نشده باشد، رشته بر اساس فاصله سفید جدا می‌شود.
split(str,num=string.count(str))
این تابع رشته را بر اساس جداکننده (`str`) جدا می‌کند. اگر جداکننده مشخص نشده باشد، رشته بر اساس فاصله سفید جدا می‌شود. تابع لیستی از زیررشته‌ها را با جداکننده ادغام شده بازمی‌گرداند.
splitlines(num=string.count('\n'))
این تابع لیستی از رشته‌ها را بازمی‌گرداند که در هر خط بازگشت به خط جدید حذف شده‌اند.
startswith(str,beg=0,end=len(str))
این تابع یک مقدار منطقی برمی‌گرداند که نشان‌دهنده این است که رشته با زیررشته داده‌شده بین اندیس شروع و اندیس پایان شروع می‌شود یا خیر.
strip([chars])
این تابع برای انجام توابع lstrip و rstrip روی رشته استفاده می‌شود.
swapcase()
این تابع حالت تمام کاراکترهای یک رشته را معکوس می‌کند.
title()
این تابع برای تبدیل یک رشته به حالت عنوان یا title-case استفاده می‌شود؛ به عبارت دیگر، حروف اول هر کلمه به حروف بزرگ و سایر حروف به حروف کوچک تبدیل می‌شوند. به عنوان مثال، رشته "meEruT" به "Meerut" تبدیل می‌شود.
translate(table,deletechars = '')
این تابع رشته را بر اساس جدول ترجمه‌ای که در تابع ارسال شده است، ترجمه می‌کند.
upper()
این تابع تمام کاراکترهای یک رشته را به حروف بزرگ تبدیل می‌کند.
zfill(width)
این تابع یک رشته اصلی را با صفرهای از چپ پر می‌کند تا به تعداد کلاراکترهای مشخص شده برسد؛ این تابع اصطلاحاً برای اعداد استفاده می‌شود و علامت هر چیزی که داده شده‌است (به جز یک صفر) را حفظ می‌کند.

1402/08/22 27160 3006
نظرات شما

نظرات خود را ثبت کنید...