نوع داده رشته در پایتون | به زبان ساده
در «زبان برنامهنویسی پایتون» (Python Programming Language)، شش نوع داده گوناگون شامل «عدد» (Number)، «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set)، «دیکشنری» (Dictionary) و «رشته» (String) وجود دارد. در این مطلب، به نوع داده رشته در پایتون پرداخته خواهد شد. در ادامه، روش ساخت رشته، فرمت، ویرایش و حذف رشتهها در پایتون مورد بررسی قرار خواهد گرفت. همچنین، عملیات و توابع گوناگون برای کار با رشتهها معرفی خواهند شد.
نوع داده رشته در پایتون
یک رشته در پایتون یک توالی از کاراکترها است. یک کاراکتر یک سمبل است. برای مثال، زبان انگلیسی ۲۶ کاراکتر دارد. کامپیوترها با کاراکترها کار نمیکنند، بلکه با اعداد (دودویی) کار میکنند. اگرچه کاربر کاراکترهای زیادی را روی صفحه نمایش میبینند، اما این کاراکترها در واقع به صورت ترکیبی از صفرها و یکها در کامپیوتر ذخیره میشوند.
این تبدیل کاراکتر به عدد، «رمزنگاری» (Encoding) نام دارد و فرایند معکوس آن (از کاراکتر به عدد) «رمزگشایی» (Decoding) نام دارد. «اَسکی» (ASCII) و «یونیکُد» (Unicode) برخی از روشهای محبوب رمزنگاری هستند که مورد استفاده قرار میگیرند. در پایتون، رشته یک توالی از کاراکترهای یونیکد است. یونیکد برای در بر گرفتن کلیه کاراکترها در همه زبانها معرفی شده است و یکنواختی را به کدگذاری آورده است.
در پایتون روشهای مختلفی برای تبدیل رشته به عدد و رشته به لیست نیز وجود دارد.
روش ساخت رشته در پایتون
رشتهها در پایتون را میتوان با قرار دادن کاراکترها در میان جفت نقل قول تک انگلیسی ('') یا جفت نقل قول جفت انگلیسی ("") ساخت. در پایتون، حتی میتوان رشتهها را با قرار دادن در میان یک جفت از سه علامت نقل قول تکی ('''''') نیز ساخت.
اما از این حالت معمولا برای نمایش رشتههای چندخطی و «داکاسترینگها» (Docstrings) استفاده میشود.
در قطعه کد بالا، رشته Hello به سه روشی که پیشتر بیان شد، ساخته و چاپ شدهاند. سپس، رشته «Hello, welcome to the world of Python» که در دو خط آمده، با استفاده از یک جفت سه علامت نقل قول تکی ساخته و سپس چاپ شده است. خروجی حاصل از اجرای کد بالا، به صورت زیر خواهد بود.
دسترسی به کاراکترهای نوع داده رشته در پایتون
میتوان به کاراکترهای رشته با استفاده از اندیسها دسترسی داشت. همچنین، میتوان به رنجی از کاراکترهای رشته با استفاده از برشزنی دسترسی پیدا کرد. اندیسها از ۰ شروع میشود. تلاش برای دسترسی پیدا کردن به یک کاراکتر خارج از رنج اندیس منجر به خطای IndexError میشود. اندیس باید یک عدد صحیح باشد. نمیتوان از عدد ممیز شناور یا دیگر انواع دادههای موجود در پایتون به عنوان اندیس دسترسی به رشتهها استفاده کرد.
این کار منجر به خطای TypeError میشود. پایتون امکان اندیسدهی منفی برای توالیها را نیز فراهم میکند. اندیس ۱- به آخرین عنصر از رشته و ۲- به عنصر یکی مانده به آخر رشته اشاره دارد. میتوان به طیفی از عناصر رشته نیز با استفاده از عملگر برشزنی یعنی «دو نقطه» (colon) دسترسی داشت.
در کد بالا، ابتدا رشته programiz ساخته شده و در متغیر str قرار گرفته است. سپس، با استفاده از (print('str = ', str، محتوای متغیر str به صورت زیر چاپ شده است.
str = programiz
از دستور ([print('str[0] = ', str[0 برای بازگردانی اولین عنصر رشته (با اندیس ۰) و چاپ آن در خروجی استفاده شده است. خروجی این دستور در زیر آمده است.
str[0] = p
با استفاده از اندیسدهی منفی در دستور ([print('str[-1] = ', str[-1 آخرین کاراکتر، رشته چاپ خواهد شد. خروجی این دستور به صورت زیر خواهد بود.
str[-1] = z
با استفاده از دستور ([print('str[1:5] = ', str[1:5، به روش برشزنی، دومین کاراکتر (اندیس ۱) تا پنجمین کاراکتر (اندیس ۴) در خروجی چاپ میشوند.
str[1:5] = rogr
با ترکیب برشزنی و اندیسدهی معکوس، با استفاده از دستور ([print('str[5:-2] = ', str[5:-2، از کاراکتر ششم (اندیس ۵) تا کاراکتر یکی مانده به آخر یعنی هفتمین کاراکتر (اندیس ۲-) در خروجی چاپ میشوند. خروجی این دستور، به صورت زیر است.
str[5:-2] = am
در صورتی که برای دسترسی به اندیسی خارج از رنج موجود تلاش شود و یا از یک عدد اعشاری استفاده شود، پیغام خطا صادر میشود. نمونههای زیر در همین رابطه قابل توجه هستند.
# index must be in range >>> my_string[15] ... IndexError: string index out of range # index must be an integer >>> my_string[1.5] ... TypeError: string indices must be integers
برشزنی بر اساس اندیسها را میتوان به بهترین شکل با استفاده از تصویر زیر نمایش داد. برای دسترسی به یک رنج، نیاز به اندیسهایی است که آن بخش از رشته را برش میزنند.
روش تغییر یا حذف یک رشته در پایتون
رشتهها غیر قابل تغییر هستند. این یعنی، عناصر یک رشته را نمیتوان پس از آنکه تخصیص پیدا کردند تغییر داد. میتوان به سادگی رشتههای گوناگون را به نام مشابهی تخصیص داد.
نمونههای زیر در همین رابطه، قابل توجه هستند.
>>> my_string = 'programiz' >>> my_string[5] = 'a' ... TypeError: 'str' object does not support item assignment >>> my_string = 'Python' >>> my_string 'Python'
نمیتوان کاراکترهای یک رشته را حذف کرد. اما حذف رشته به طور کامل، با استفاده از کلیدواژه del امکانپذیر است.
>>> del my_string[1] ... TypeError: 'str' object doesn't support item deletion >>> del my_string >>> my_string ... NameError: name 'my_string' is not defined
عملیات روی نوع داده رشته در پایتون
عملیات زیادی وجود دارد که روی نوع داده رشته در پایتون قابل انجام هستند. به همین دلیل، رشته یکی از پر کاربردترین انواع داده در پایتون است. برخی از این موارد، در ادامه مورد بررسی قرار گرفتهاند.
الحاق دو یا تعداد بیشتری رشته
اتصال دو یا تعداد بیشتری رشته در یک رشته را الحاق گویند. عملگر «+» کار الحاق را در پایتون انجام میدهد. عملگر «*» نیز میتواند یک رشته را به تعداد دفعات مشخصی (که به برنامه داده شده) تکرار کند.
در کد بالا، دو رشته تعریف شدهاند. متغیر str1 دارای مقدار Hello و str2 دارای مقدار ٰ!World است. دستور (print('str1 + str2 = ', str1 + str2، این دو رشته را الحاق کرده و حاصل آن را در خروجی چاپ میکند.
str1 + str2 = HelloWorld!
برای آنکه فاصله بین Hello و World رعایت شود، میتوان کد را به صورت زیر اصلاح کرد.
خروجی به صورت زیر تغییر میکند.
str1 + str2 = Hello World!
دستور (print('str1 * 3 =', str1 * 3، رشته str1 را سه بار تکرار و سپس آن را چاپ میکند. خروجی این دستور به صورت زیر است.
str1 * 3 = HelloHelloHello
برای الحاق رشتههایی که در خطوط متفاوت قرار دارند، میتوان از پرانتز استفاده کرد. نمونههای زیر در همین رابطه قابل ملاحظه هستند.
>>> # two string literals together >>> 'Hello ''World!' 'Hello World!' >>> # using parentheses >>> s = ('Hello ' ... 'World') >>> s 'Hello World'
حلقه زدن در رشتهها
با استفاده از حلقه for میتوان در رشتهها حلقه زد. در ادامه، مثالی ارائه شده که در آن تعداد «l»های موجود در رشته شمرده میشود. سپس، با استفاده از دستور ('print(count,'letters found، این تعداد در یک جمله کامل چاپ میشود.
خروجی کد بالا، به صورت زیر است.
3 letters found
تست عضویت رشته در پایتون
میتوان از کلیدواژه in برای بررسی این موضوع استفاده کرد که آیا یک زیر رشته در یک رشته موجود است یا خیر. مثالهای زیر در همین رابطه، قابل توجه هستند.
خروجی قطعه کد بالا به صورت زیر است.
True
مثال دیگری نیز در ادامه آمده است.
خروجی قطعه کد بالا به صورت زیر است.
False
توابع توکار برای نوع داده رشته پایتون
توابع توکار متعددی برای کار با نوع داده رشته در پایتون وجود دارند. از جمله متداولترین این توابع توکار میتوان به ()enumerate و ()len اشاره کرد. تابع ()enumerate یک شی شمارشی را باز میگرداند. این تابع، اندیس و مقدار همه عناصر رشته را به صورت جفت (اندیس، مقدار) باز میگرداند. تابع ()len، طول یک رشته (تعداد کاراکترهای آن رشته) را باز میگرداند.
قالببندی رشته در پایتون
در ادامه، روشهای قالببندی رشته در پایتون مورد بررسی قرار گرفته است.
فرار از توالی
اگر کاربر بخواهد رشتههای مانند -"?He said, "What's there- را چاپ کند، نمیتواند از تک نقل قول (') یا جفت نقل قول (") استفاده کند. زیرا این کار موجب خطای نحو (SyntaxError) میشود. زیرا، خط رشته حاوی سینگل و دابل کوتنشن است. نمونه زیر مثالی در همین رابطه است.
>>> print("He said, "What's there?"") ... SyntaxError: invalid syntax >>> print('He said, "What's there?"') ... SyntaxError: invalid syntax
یک راهکار برای حل این مساله استفاده از جفت نقل قول تکی است. راهکار دیگر، فرار از توالی است. فرار توالی با یک «بکاسلش» (Backslash) آغاز و به گونهای متفاوت تفسیر میشود. اگر از تک نقل قول برای نمایش یک رشته استفاده شود، از همه تک نقل قولهای قرار گرفته در رشته باید فرار شود. به طور مشابه، فرار از جفت نقل قول نیز باید اتفاق بیفتد. در ادامه، کدهای قابل استفاده برای نمایش جمله بالا، ارائه شدهاند.
در ادامه، لیست همه روشهای فرار توالی در پایتون ارائه شده است.
- newline\: بکاسلش و خط جدید نادیده گرفته میشوند.
- \\: بکاسلش
- '\: برای Single quote
- "\: برای Double quote
- a\: اسکی بل (ASCII Bell)
- b\: بکاسپیس اسکی (ASCII Backspace)
- f\: فرمفید اسکی (ASCII Formfeed)
- n\: خط جدید اسکی (ASCII Linefeed)
- r\: بازگشت به عقب اسکی (ASCII Carriage Return)
- t\: تب افقی اسکی (ASCII Horizontal Tab)
- v\: تب عمودی اسکی (ASCII Vertical Tab)
- ooo\: کاراکتر با مقدار مبنای هشت ooo
- xHH\: کاراکتر با مقدار هگزادسیمال HH
در ادامه، مثالهایی از این کاراکترها آورده شده است.
>>> 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
رشته خام برای نادیده گرفتن فرار توالی
گاهی ممکن است نیاز به نادیده گرفتن فرار توالی درون یک رشته باشد. برای انجام این کار، میتوان r یا R را در مقابل یک رشته قرار داد. این کار نشان میدهد که رشته مذکور یک رشته خام است و فرار توالی آن نادیده گرفته میشود. در ادامه مثالهایی برای این موارد ارائه شده است.
خروجی قطعه کد بالا به صورت زیر است.
This is a good example
مثال دیگری در همین رابطه و در ادامه ارائه شده اس.
خروجی قطعه کد بالا به صورت زیر است.
مفید واقع شد