رشته ها در پایتون
به دنباله ای از کارکتر ها که در کنار یک دیگر در یک دنباله وجود دارند رشته گفته می شود ، متنی که می خواهیم به متغییر رشته ای انتصاب دهیم باید داخل تک کتیشن ( ‘ ) یا دابل کتیشن ( ” ) و حتی تریپل کتیشن ( ”’ ) قرار گیرد، البته از ( ”’ ) معمولا برای رشته های چند خطی استفاده می شود. برای درک بهتر این موضوع به مثال های زیر توجه فرمایید.
به دنباله ای از کارکتر ها که در کنار یک دیگر در یک دنباله وجود دارند رشته گفته می شود ، متنی که می خواهیم به متغییر رشته ای انتصاب دهیم باید داخل تک کتیشن ( ‘ ) یا دابل کتیشن ( ” ) و حتی تریپل کتیشن ( ”’ ) قرار گیرد، البته از ( ”’ ) معمولا برای رشته های چند خطی استفاده می شود.
فهرست مطالب
برای درک بهتر این موضوع به مثال های زیر توجه فرمایید.
>>> print("Hello")
Hello
>>> print('Hello')
Hello
>>> a = "Hello"
>>> print(a)
Hello
در صورتی که رشته ما به صورت چند خطی باشد یعنی بین کارکتر های متن از Enter استفاه شده بود می توان از ( ”’ ) یا ( “”” ) برای انتصاب رشته به متغییر استفاده کرد. به مثال زیر توجه فرمایید:
>>> a = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua."""
>>> print(a)
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
>>> a = '''Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.'''
print(a)
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
توجه داشته باشید که رشته ها یک تاپل (tuple) از کارکتر ها می باشند و می توان به تک تک کارکتر های تشکیل دهنده یک رشته همانند تاپل ها (tuple) دسترسی داشته باشیم. به مثال زیر توجه فرمایید:
>>> a = "Hello, World!"
>>> print(a[0])
H
>>> print(a[4])
o
برای دسترسی به عناصر تشکیل دهنده رشته علاوه بر روش بالا که دسترسی اندیس گذاری نرمال نام دارد روش دیگری وجود دارد که به آن اندیس گذاری معکوس گفته می شود.
همانطور که در شکل بالا مشاهده می کنید اندیس گذاری منفی در رشته ها به این شکل است که اندیس -1 به آخرین عنصر رشته اختصاص داده می شود و به ترتیب به سمت ابتدای رشته یک واحد یک واحد کاسته می شود.
نکته : باید توجه داشت اولین عنصر یک رشته همواره کوچکترین اندیس را داراست.
>>> my_str = 'pronesh.com'
>>> print('str = ' , my_str)
str = pronesh.com
>>> print('str[0] = ' , my_str[0])
str[0] = p
>>> print('str[-1] = ' , my_str[-1])
str[-1] = m
>>> print('str[10] = ' , my_str[10])
str[10] = m
>>> print('str[0:7] = ' , my_str[0:7])
str[0:7] = pronesh
>>> print('str[7:-1] = ' , my_str[7:-1])
str[7:-1] = .co
>>> print('str[7:] = ' , my_str[7:])
str[7:] = .com
باید توجه داشت که شماره اندیس های رشته ها همواره عدد صحیح می باشند و استفاد از هر نوع داده ای به جز داده صحیح باعث ایجاد اعلام خطا توسط پایتون خواهد شد، همچنین شماره اندیس های یک رشته از 0 شروع شده و به تعداد عناصر (کاراکترهای) تشکیل دهنده رشته یک واحد یک واحد اضافه می شود اندیس های یک رشته با طول 10 از 0 تا 9 شماره گذاری می شود، پس اگر بخواهیم به اندیسی خارج از محدوده عناصر رشته دسترسی پیدا کنیم پایتون به شما اعلام خطا خواهد داد.
>>> my_str = 'pronesh.com'
>>> len(my_str)
11
>>> my_str[11]
Traceback (most recent call last):
File "", line 1, in
IndexError: string index out of range
>>> my_str[10]
'm'
>>> my_str[10.0]
Traceback (most recent call last):
File "", line 1, in
TypeError: string indices must be integers
همچنین با کمک گرفتن از متد ()len می توان طول رشته یا به عبارتی دیگر تعداد کارکتر های تشکیل دهنده رشته را مشخص نمود. مانند مثال زیر :
a = "Hello, World!"
print(len(a))
13
تغییر یا حذف رشته ها
عناصر رشته تغییر ناپذیر هستند به این معنا که ما نمیتوانیم عناصر (کاراکتر های) تشکیل دهنده یک رشته را یک به یک تغییر دهیم، ولی می توانیم کل رشته موجود دریک متغییر رشته ای را به شکل کلی تغییر داد، به مثال زیر دقت کنید :
>>> my_str = 'pronesh'
>>> my_str[3] = 'd'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object does not support item assignment
>>> my_str
'pronesh'
>>> my_str = 'IRAN'
>>> my_str
'IRAN'
همچنین عناصر یک رشته قابل حذف نیستند، ولی می توان کل رشته را با دستور del حذف کرد، به مثال زیر توجه کنید :
>>> my_str = 'pronesh'
>>> del my_str[4]
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object doesn't support item deletion
>>> del my_str
>>> my_str
Traceback (most recent call last):
File "", line 1, in
NameError: name 'my_str' is not defined
همانطور که در مثال بالا مشاهده نمودید بعد از حذف کامل متغییر my_str، پایتون دیگر این نام را به عنوان متغییر نمی شناسد. و در صورت استفاده از آن به این عنوان پیغام خطا صادر می کنید.
عملیات رشته ها در پایتون
رشته ها یکی از کاربردی ترین متغییر ها در زبان برنامه نویس پایتون می باشند، از این رو عملیات زیادی وجود دارد که می توان با رشته ها انجام داد، حال به شرح هر یک خواهیم پرداخت.
الحاق دو رشته
برای الحاق رشته ها از دو عملگر + و * استفاده می شود، + برای پیوستن دو رشته به یکدیگر و * برای الحاق یک رشته با خودش به تعداد مشخص کاربرد دارند، برای درک بهتر این موضوع به مثال های زیر توجه کنید:
>>> str1 = 'Hello'
>>> str2 = 'World!'
>>> print(str1 + str2)
HelloWorld!
>>> print('str1 + str2 = ',str1 + str2)
str1 + str2 = HelloWorld!
>>> print('str1 * 3 = ',str1 * 3)
str1 * 3 = HelloHelloHello
روش دیگر برای الحاق رشته ها کنار هم قرار دادن آن ها در کنار یکدیگر است، این عمل باعث الحاق رشته ها می شود :
>>> my_str = ( 'Hello '
'World!')
>>> my_str
'Hello World!'
اگر بخواهیم رشته ها را در خطوط مختلف به هم متصل کنیم باید از پرانتز مانند مثال بالا استفاده کنیم.
اعمال حلقه for بر روی رشته ها
می توان از رشته برای شمارنده حلقه for استفاده کرد، برای درک بهتر این موضوع با مثالی آن را شرح خواهیم داد :
>>> count = 0
>>> for letter in 'Hello World':
if(letter == 'l'):
count += 1
>>> print(count,'letters found')
3 'letters found
برای شمارش تعداد تکرار عنصر مورد نظر در یک رشته از دستور count استفاده می شود، همچنین برای پیدا کردن اندیس عنصر مورد نظر در یک رشته از دستور index به شکل زیر استفاده می شود:
>>> my_str = 'Hello World'
>>> my_str.count('l')
3
>>> my_str.index('l')
2
>>> my_str.index('l',4)
9
>>> my_str.count('ld')
1
>>> my_str.index('ld',4)
9
در دستور index می توان بعد آرگومان مربوط به کارکتر یا زیر رشته مورد جستجو شماره اندیس شروع جستجو را نیز مشخص کرد، در مثال فوق عدد 4 بعد از ‘l’ به این معناست که جستجو از اندیس 4 به بعد شروع شود و عناصر موجود در اندیس های 0 تا 3 را نادیده بگیر.
تست عضویت رشته ها
برای بررسی این که آیا زیر رشته مورد نظر در یک رشته وجود دارد یا خیر می توان از دستور in به شکل زیر استفاده کرد:
>>> 'P' in 'Pronesh'
True
>>> 'Pro' in 'Pronesh'
True
>>> 'c' in 'Pronesh'
False
>>> 'c' not in 'Pronesh'
True
نکته مهمی که باید به آن توجه داشت تفاوت حروف کوچک و بزرگ در پایتون می باشد و باید یادآوری کنیم که پایتون نسبت به حروف کوچک و بزرگ حساس است، مثلا در کلمه ‘Pronesh’ حرف ‘o’ با حروف کوچک نوشته شده و اگر ما به دنبال حرف ‘O’ که به صورت حروف بزرگ نوشته شده بگردیم حاصل جستجو false خواهد بود.
>>> 'O' in 'Pronesh'
False
>>> 'o' in 'Pronesh'
True
برای مشاهده عناصر (کارکتر های) یک رشته و اندیس آن ها می توان از تابع enumerate به شکل زیر استفاده کرد:
>>> my_str = 'IRAN'
>>> list(enumerate(my_str))
[(0, 'I'), (1, 'R'), (2, 'A'), (3, 'N')]
قالب بندی رشته ها
همانطور متوجه شدید برای تولید یک متن رشته ای کافیست آن را بین تک کوتیش ( ‘ ) و یا دبل کوتیشن ( ” ) قرار داد، حال فرض کنید ما رشته ای داریم که در آن رشته، خود تک کوتیشن یا دابل کوتیشن هم بخشی از رشته باشد، مثل جمله زیر :
He said, “What’s there?”
>>> print("He said, "What's there?"")
File "", line 1
print("He said, "What's there?"")
^
SyntaxError: invalid syntax
>>> print('He said, "What's there?"')
File "", line 1
print('He said, "What's there?"')
^
SyntaxError: invalid syntax
همانطور که در مثال های بالا مشاهده کردید چاپ این رشته چه با تک کوتیشن ( ‘ ) چه با دابل کوتیشن ( ” ) مشکل دارد و پایتون برای چاپ آن اعلام خطا می کند. برای رفع این مشکل راه کار هایی وجود دارد، که به بررسی آن ها خواهیم پرداخت.
راه کار اول: استفاده از تریپل کوتیشن ( ”’ ) برای مشخص کردن محدوده رشته به جای تک کتیشن و دابل کوتیشن می باشد به مثال زیر توجه کنید:
>>> print('''He said, "What's there?"''')
He said, "What's there?"
راه کار دوم: استفاده از دنباله های فرار (Escape Sequence) می باشد. در این روش اگر متن خود را داخل تک کوتیشن ( ‘ ) قرار داده اید یک بک اسلش ( \ ) پشت تمام تک کتشین هایی که جزیی از متن هستند قرار دهید و برای دابل کوتیشن ها نیز به همین ترتیب بک اسلش را پشت تمام دابل کتیشن هایی که جزیی از متن هستند قرار می دهیم. به مثال های زیر توجه فرمایید :
>>> print('He said, "What\'s there?"')
He said, "What's there?"
>>> print("He said, \"What's there?\"")
He said, "What's there?"
همانطور که در مثال های بالا مشاهده می کنید در هر سه حالت تست شده، رشته مد نظر به شکل کامل در خروجی چاپ شده است، بنابراین می توان بنا به نیاز از هر یک از روش های فوق استفاده کرد. البته برای حالت های خاص دیگری در رشته ها دنباله های فرار (Escape Sequence) دیگر در نظر گرفته شده که می توانید در جدول زیر لیست تمام دنباله های فراری که توسط پایتون پشتیبانی می شود مشاهد کرد.
برای درک بهتر دنباله های فرار جدول فوق، به مثال های زیر توجه کنید:
>>> print("C:\\Python32\\Lib")
C:\Python32\Lib
>>> print("This is printed\nin two lines")
This is printed
in two lines
>>> print("This is \x48\x45\x58 representation")
This is HEX representation
>>> print("This is \x61 \ngood example")
This is a
good example
نادیده گرفتن دنباله های فرار داخل یک متن
گاهی لازم می شود دنباله های فرار موجود در یک متن را نادیده بگیریم، در این صورت می توان با قرار دادن کارکتر r یا R در ابتدای رشته (قبل از کوتیش [‘ – “] ابتدای رشته) به پایپون بفهمانیم که رشته موردن نظر را به عنوان رشته ای خام در نظر بگیرد و نماد ها و دستورات مربوط به دنباله های فرار را نادیده بگیرد. به مثال زیر توجه کنید:
>>> print(r"This is \x61 \ngood example")
This is \x61 \ngood example
>>> print(R"This is \x61 \ngood example")
This is \x61 \ngood example
قالب بندی رشته ها با متد ()format
متد format در قالب بندی داده برای چاپ بسیار پرکاربرد می باشد، در متد format از براکت ها ({}) برای محل جا نمایی متغییر ها و مقادیر استفاده می شود، همچنین می توان از متغییر ها و شماره گذاری برای ترتیب دادن به نمایش داده ها استفاده کرد. با بررسی مثال های زیر بهتر متوجه این نکات خواهید شد.
>>> default_order = "{}, {} and {}".format('Hooman','Farzaneh','Ali')
>>> print(default_order)
Hooman, Farzaneh and Ali
>>> default_order = "{1}, {0} and {2}".format('Hooman','Farzaneh','Ali')
>>> print(default_order)
Farzaneh, Hooman and Ali
>>> default_order = "{f}, {a} and {h}".format(h='Hooman',f='Farzaneh',a='Ali')
>>> print(default_order)
Farzaneh, Ali and Hooman
در متد format این قابلیت وجود دارد که فرمت نمایش و ترتیب نمایش داده ها را نیز مشخص کرد، مثلا در رشته ها، چپ چین، راست چین یا وسط چین کردن آن ها، در اعداد صحیح نوع نمایش آن ها (باینری، هگز و …) یا اعداد اعشاری که با چه میزان دقت و یا حتی به صورت نماد علمی نمایش داده شوند. حال با استفاده از چند مثال شما را با این موضوع بیشتر آشنا خواهیم کرد .
>>> # formatting integers
>>> "Binary representation of {0} is {0:b}".format(12)
'Binary representation of 12 is 1100'
>>> # formatting floats
>>> "Exponent representation: {0:e}".format(1566.345)
'Exponent representation: 1.566345e+03'
>>> # round off
>>> "One third is: {0:.3f}".format(1/3)
'One third is: 0.333'
>>> # string alignment
>>> "|{:<10}|{:^10}|{:>10}|".format('butter','bread','ham')
'|butter | bread | ham|'
قالب بندی به سبک قدیمی
در پایتون این قابلیت و جود دارد که از قالب بندی قدیمی ()sprintf در زبان C نیز استفاده کنیم، می توان از اپراتور % برای قالب بندی داده در چاپ استفاده کرد، این قابلیت برای کسانی که به سینتکس های زبان C بیشتر عادت کرده اند بسیار مناسب است. به مثال های زیر توجه کنید.
>>> x = 12.3456789
>>> print('The value of x is %3.2f' %x)
The value of x is 12.35
>>> print('The value of x is %3.4f' %x)
The value of x is 12.3457
متد های رایج رشته ها در پایتون
از آنجایی که رشته ها یکی از پرکاربرد ترین انواع داد در پایتون می باشند لذا متد های متعددی برای کار با آن ها وجود دارد که به چند مورد پر کاربرد آن مثل ()lower()، upper()، join()، split()، find()، replace با چند مثال اشاره می کنیم. در بخش دیگری به شکل کامل به بررسی لیست کامل این متدها خواهیم پرداخت.
>>> "PrOnEsH".lower()
'pronesh'
>>> " PrOnEsH ".upper()
'PRONESH'
>>> "This will split all words into a list".split()
['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']
>>> ' '.join(['This', 'will', 'join', 'all', 'words', 'into', 'a', 'string'])
'This will join all words into a string'
>>> 'Happy New Year'.find('ew')
7
>>> 'Happy New Year'.replace('Happy','Brilliant')
'Brilliant New Year'
دیدگاهتان را بنویسید