تابع Slice در پایتون — توضیح کاربرد به زبان ساده + کد و مثال
در طراحی برخی از برنامههای «پایتون» (Python) نیاز است که «دنباله» (Sequence) موجود در برنامه به بخشهای مختلفی تقسیم شود؛ همچنین تقسیم دستی این دنبالهها از برنامه نویس زمان زیادی میگیرد، بنابراین میتوان از تابع Slice در پایتون برای انجام این کار استفاده کرد. استفاده از توابع اینچنینی را میتوان جزئی از ترفندهای پایتون در نظر گرفت که با ارائه روشهای سادهتر، برنامهنویس را به هدفش میرساند. در این نوشتار، تابع Slice در پایتون همراه با چند مثال ارائه شده است.
تابع Slice در پایتون چیست ؟
کلمه Slice در لغت به معنی بُرش زدن است. تابع Slice در پایتون برای برش زدن یا تقسیم کردن عناصر یک مجموعه مورد استفاده قرار میگیرد. در دو حالت میتوان از تابع اسلایس در پایتون استفاده کرد. در حالت اول تابع Slice در پایتون فقط یک آرگومان دریافت میکند، در حالی که تابع نوع دوم سه آرگومان میگیرد و یک «شی» (Object) اسلایس برمیگرداند. از شی Slice میتوان به عنوان زیربخشی از یک مجموعه استفاده کرد. همچنین، عدد انتهای دنباله شامل عدد توقف نمیشود. برای مثال، اگر برنامه نویسی قصد داشته باشد دو عنصر اول یک مجموعه ۱۰ عنصری را انتخاب کند و بردارد، میتواند از تابع Slice در پایتون استفاده کند.
در ادامه به شرح سینتکس تابع Slice در پایتون پرداخته شده است.
سینتکس تابع Slice در پایتون چگونه است؟
سینتکس تابع Slice در پایتون به صورت زیر نوشته میشود. در خط اول سینتکس این تابع با یک آرگومان و در خط بعدی، نوع دوم تابع اسلایس در پایتون با سه آرگومان نمایش داده شده است.
1slice (stop)
2slice (start, stop, step)
در سینتکس تابعهای فوق، نشان داده شده است که تابع Slice هم میتواند یک و هم سه پارامتر دریافت کند؛ زیرا دو تا از پارامترهای آن میتوانند به صورت اختیاری یا همان Optional استفاده شوند. هر کدام از این پارامترها در ادامه فهرست شده و شرح داده میشوند:
- start : این پارامتر، اندیس محل شروع برش زدن را نشان میدهد. پارامتر Start برای تابع Slice اختیاری است. اگر عددی برای این پارامتر توسط برنامهنویس منظور نشود، مقدار آن به صورت پیشفرض صفر در نظر گرفته خواهد شد.
- stop : اندیس محل اتمام برش زدن دنباله با استفاده از این پارامتر مشخص میشود. این پارامتر اجباری تابع اسلایس در پایتون است و باید حتماً توسط برنامهنویس مشخص شود. همچنین عدد این اندیس شامل دنباله نهایی نمیشود.
- step : این پارامتر، تعداد پرشهای بین عناصر دنباله را مشخص میکند. Step پارامتری اختیاری در تابع Slice پایتون به حساب میآید و گامهای بین اعداد دنباله را نشان میدهد و اگر تعریف نشود به صورت پیشفرض عدد یک برای آن در نظر گرفته میشود.
تابع Slice در پایتون، شی Slice را برمیگرداند. در ادامه این مطلب، روش استفاده از تابع Slice در پایتون را یاد میگیریم.
چگونه از تابع Slice در پایتون استفاده کنیم؟
متد یا تابع Slice در پایتون براساس محدوده مشخص شده بخشی از یک دنباله را به عنوان شیئی از کلاس Slice بازمیگرداند. این تابع میتواند همراه با «رشته» یا «استرینگ» (Stirng)، «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set)، «بایت» (Byte)، تابع Range یا شی کلاسهای سفارشی با متدهای دنبالهای__getitem__() و__len__() و سایر موارد استفاده شود.
روش استفاده از تابع اسلایس در رشته
در این بخش مثالی از تابع Slice پایتون در استرینگ یا همان رشته ارائه شده است.
1mystr = 'TutorialsTeacher'
2nums = [1,2,3,4,5,6,7,8,9,10]
3
4portion1 = slice(9)
5portion2 = slice(2, 8, 2)
6
7print('slice: ', portion1)
8print('String value: ', mystr[portion1])
9print('List value: ', nums[portion1])
10
11print('slice: ', portion2)
12print('String value: ', mystr[portion2])
13print('List value: ', nums[portion2])
خروجی مثال فوق، به صورت زیر نمایش داده میشود.
slice: slice(None, 9, None) String value: Tutorials List value: [1,2,3,4,5,6,7,8,9] slice: slice(2, 8, 2) String value: tra List value: [3, 5, 7]
در کدهای فوق، دستورslice(9) ، شی Slice را ازslice(None, 9, None) برمیگرداند؛ این عبارت، تابعی با یک پارامتر است و میتوان در بخشهای خالی آن، پارامترهایی را برای محل شروع و اندازه گامهای پرش بین عناصر را قرار داد. در ادامه، مثالی برای استفاده از اسلایس در لیستهای پایتون ارائه شده است.
روش استفاده از تابع اسلایس در لیست های پایتون
در این بخش، مثالی برای استفاده از تابع Slice در لیست پایتون به صورت زیر ارائه شده است:
1nums = [1,2,3,4,5,6,7,8,9,10]
2odd_portion = slice(0, 10, 2)
3print(nums[odd_portion])
4
5even_portion = slice(1, 10, 2)
6print(nums[even_portion])
خروجی مثال فوق، پس از اجرای کدها، به صورت زیر نمایش داده میشود:
[1, 3, 5, 7, 9] [2, 4, 6, 8, 10]
فیلم های آموزش برنامه نویسی پایتون
دورههای آموزش ویدیویی در پلتفرم فرادرس بر اساس موضوع در مجموعههای آموزشی مختلفی دستهبندی میشوند. یکی از این مجموعهها مربوط به آموزش زبان پایتون از سطحهای مقدماتی تا پیشرفته همراه با انواع آموزشهای کاربردی و پروژهمحور است. با توجه به اینکه این زبان برنامه نویسی در حوزههای مختلف علوم کامپیوتر مورد استفاده قرار میگیرد، این بخش به معرفی مجموعه آموزشهای ویدیویی پایتون برای یادگیری بیشتر این زبان در کاربردهای مختلف اختصاص داده شده است. در زمان تدوین این مطلب، مجموعه دورههای برنامه نویسی فرادرس حاوی بیش از ۳۰۰ ساعت محتوای ویدیویی است و شامل ۵۸ دوره میشود. در ادامه برخی از دورههای این مجموعه آموزشی به طور خلاصه معرفی شدهاند:
- فیلم آموزش برنامه نویسی پایتون Python - مقدماتی (طول مدت: ۱۹ ساعت و ۵۳ دقیقه، مدرس: پژمان اقبالی شمس آبادی): در این فرادرس زبان برنامه نویسی پایتون از پایهایترین مباحث تدریس میشود و برای دانشجویان و علاقهمندان به پایتون مناسب است. برای مشاهده فیلم آموزش برنامه نویسی پایتون Python - مقدماتی + کلیک کنید.
- فیلم آموزش ترفندهای برنامه نویسی پایتون (طول مدت: 9 ساعت و 9 دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): در این فرادرس، سعی شده است مهمترین و کاربردیترین نکات استفاده از زبان برنامهنویسی پایتون و کتابخانههای استاندارد آن، بررسی شوند. با آموختن نکات و ترفندهایی که در این آموزش ارائه شده است، دانش برنامهنویسی فرد به سطح بالاتر از متوسط میرسد و میتواند برای آموختن نکات پیشرفتهتر، برنامهریزی کند. برای مشاهده فیلم آموزش ترفندهای برنامه نویسی پایتون + کلیک کنید.
- فیلم آموزش برنامه نویسی شی گرا در پایتون Python (طول مدت: ۷ ساعت و ۲۹ دقیقه، مدرس: دکتر فرشید شیرافکن): در این فرادرس مفاهیم شی گرایی در پایتون با سادهترین روش و همراه با ذکر مثال آموزش داده شده است. برای مشاهده فیلم آموزش برنامه نویسی شی گرا در پایتون Python + کلیک کنید.
- فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون (طول مدت: ۴ ساعت و ۴۶ دقیقه، مدرس: میترا تجربه کار): این دوره آموزشی برای تکمیل مباحث موجود در دوره پایتون مقدماتی ارائه شده است. همچنین آشنایی با کتابخانه NumPy، بخش جدیدی از برنامه نویسی پایتون را در این دوره به دانشجویان و علاقهمندان معرفی میکند. برای مشاهده فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون + کلیک کنید.
- فیلم آموزش پایتون گرافیکی - رابط های گرافیکی پایتون (طول مدت: ۵ ساعت و ۳ دقیقه، مدرس: سید رضا دهقان): برای برنامه نویسان پایتون، یادگیری حداقل یک واسط گرافیکی (Graphical User Interface | GUI) این زبان برنامه نویسی اهمیت بسیاری دارد. به همین دلیل، در این دوره آموزشی به بررسی واسطهای گرافیکی پایتون پرداخته شده است. برای مشاهده فیلم آموزش پایتون گرافیکی - رابطهای گرافیکی پایتون + کلیک کنید.
- فیلم آموزش پروژه محور Python پایتون - ساخت نرم افزار برای ویندوز و لینوکس در Python (طول مدت: ۹ ساعت و ۳۴ دقیقه، مدرس: محمد حسینی): ابزار توسعه در این دوره آموزشی بر مبنای PyQt است. با استفاده از این فرادرس، علاقهمندان با نحوه تولید نرم افزار آشنا میشوند و میتوانند برای هر زمینهای نرم افزار مورد نیازشان را بسازند. برای مشاهده فیلم آموزش پروژه محور Python پایتون - ساخت نرم افزار برای ویندوز و لینوکس در Python + کلیک کنید.
استفاده از اندیس منفی در تابع Slice پایتون
در تابع Slice پایتون از اندیس منفی هم پشتیبانی میشود. در مثال زیر، برای پارامترهای Start و Stop از اعداد منفی استفاده شده است.
1nums = [1,2,3,4,5,6,7,8,9,10]
2even_portion = slice(-9, -1, 2)
3print(nums[even_portion])
خروجی مثال فوق، به صورت زیر نمایش داده میشود:
[2, 4, 6, 8]
زمانی که پارامترهای ورودی تابع اسلایس در پایتون منفی باشند، اندیسها از راست به چپ شمارهگذاری میشوند. یعنی مقلاً در کدهای فوق برای ارجاع به آخرین عنصر لیستnums یعنی عدد10 ، از اندیس-1 به صورتnums[-1]استفاده میشود. در مثال فوق نقطه شروع -9 است و این یعنی از انتهای لیست باید ۹ گام به عقب و به سمت ابتدای لیست حرکت کرد. بنابراین، مقدار محل شروع تعیین شده برای تابع Slice در کدهای بالا عدد ۲ است. همچنین نقطه توقف نیز در مثال فوق-1 است و همانطور که پیشتر توضیح داده شد،-1 به آخرین عنصر لیست یا همان انتهای لیست اشاره میکند و در اینجا یعنی بُرش مورد نظر تا انتهای لیست ادامه دارد.
اندیس دهی برای برش زدن به جای استفاده از Slice در پایتون چگونه انجام میشود؟
برای برش زدن به جای استفاده از تابع Slice در پایتون میتوان از روش «اندیسدهی» (نمایهسازی | Indexing) نیز استفاده کرد. در این روش از دستوری با سینتکسی مشابه سینتکس تابع اسلایس در پایتون استفاده میشود و در آن مثل تابع Slice نقاط شروع، توقف و گامهای حرکت مشخص میشوند. سینتکس این روش در ادامه آمده است.
1iterable_obj[start:stop:step]
در ادامه مثالی برای درک بهتر این موضوع ارائه شده است:
1nums = [1,2,3,4,5,6,7,8,9,10]
2print('Odd nums: ', nums[0:10:2]) # start 0, stop: 10, step:2
3print('Even nums: ', nums[1:10:2]) # start 1, stop: 10, step:2
4
5mystr = 'TutorialsTeacher'
6print(mystr[0:9]) # start 0, stop: 9, step:1
7print(mystr[9:]) # start 9, stop: end of string, step:1
8print(mystr[9::2]) # start 9, stop: end of string, step:2
9print(mystr[::2]) # start 0, stop: end of string, step:2
پس از پیادهسازی کدهای فوق، خروجی زیر نمایش داده میشود:
Odd nums: [1, 3, 5, 7, 9] Even nums: [2, 4, 6, 8, 10] Tutorials Teacher Tahr Ttrasece
مثال های تابع Slice در پایتون
در این بخش مثالهای بیشتری از تابع Slice در پایتون ارائه شده است.
مثال اول تابع Slice در پایتون
در مثال اول زیر، کدهایی نوشته شدهاند که یک شی Slice را برای برش زدن دنباله برمیگردانند.
1# contains indices (0, 1, 2)
2result1 = slice(3)
3print(result1)
4
5# contains indices (1, 3)
6result2 = slice(1, 5, 2)
7print(slice(1, 5, 2))
خروجی کدهای فوق پس از پیادهسازی به صورت زیر نمایش داده شده است:
slice(None, 3, None) slice(1, 5, 2)
در کدهای فوق،result1 وresult2 اشیا Slice به حساب میآیند. حال پس از مشاهده مثالی در رابطه با اشیا Slice در مثالهای بعدی به بررسی «زیر رشته» (Sub-String)، «زیر لیست» (Sub-List)، «زیر تاپل» (Sub-Tuple) و سایر موارد پرداخته میشود.
مثال دوم تابع Slice در پایتون
در این مثال رشتهای با استفاده از شی Slice ایجاد شده است. کدهای این مثال در ادامه نمایش داده شدهاند:
1# Program to get a substring from the given string
2
3py_string = 'Python'
4
5# stop = 3
6# contains 0, 1 and 2 indices
7slice_object = slice(3)
8print(py_string[slice_object]) # Pyt
9
10# start = 1, stop = 6, step = 2
11# contains 1, 3 and 5 indices
12slice_object = slice(1, 6, 2)
13print(py_string[slice_object]) # yhn
خروجی کدهای فوق، پس از اجرای آنها، به صورت زیر است:
Pyt yhn
مثال سوم تابع Slice در پایتون
در این مثال زیر رشتهای با استفاده از اندیسهای منفی ایجاد شده است. کدهای مثال ایجاد زیر رشته در ادامه نمایش داده شدهاند:
1py_string = 'Python'
2
3# start = -1, stop = -4, step = -1
4# contains indices -1, -2 and -3
5slice_object = slice(-1, -4, -1)
6
7print(py_string[slice_object]) # noh
خروجی کدهای فوق، در ادامه نمایش داده شدهاند:
noh
مثال چهارم تابع Slice در پایتون
در مثال ارائه شده این بخش، با تابع Slice در پایتون یک زیر لیست و زیر تاپل با استفاده از کدهای زیر ایجاد میشود.
1py_list = ['P', 'y', 't', 'h', 'o', 'n']
2py_tuple = ('P', 'y', 't', 'h', 'o', 'n')
3
4# contains indices 0, 1 and 2
5slice_object = slice(3)
6print(py_list[slice_object]) # ['P', 'y', 't']
7
8# contains indices 1 and 3
9slice_object = slice(1, 5, 2)
10print(py_tuple[slice_object]) # ('y', 'h')
خروجی کدهای فوق به صورت زیر نمایش داده میشوند:
['P', 'y', 't'] ('y', 'h')
مثال پنجم تابع Slice در پایتون
در این مثال با تابع Slice در پایتون، زیر لیست و زیر تاپلهایی با استفاده از اندیسهای منفی به صورت زیر ایجاد میشوند:
1py_list = ['P', 'y', 't', 'h', 'o', 'n']
2py_tuple = ('P', 'y', 't', 'h', 'o', 'n')
3
4# contains indices -1, -2 and -3
5slice_object = slice(-1, -4, -1)
6print(py_list[slice_object]) # ['n', 'o', 'h']
7
8# contains indices -1 and -3
9slice_object = slice(-1, -5, -2)
10print(py_tuple[slice_object]) # ('n', 'h')
خروجی کدهای فوق به صورت زیر نمایش داده میشود:
['n', 'o', 'h'] ('n', 'h')
مثال ششم تابع Slice در پایتون
شی Slice و استفاده از تابع Slice در پایتون را میتوان با روش نمایه سازی نیز جایگزین کرد و به جای استفاده از تابع Slice، از اندیسها برای ایجاد برشهایی در دنباله استفاده کرد. در ادامه مثالی برای نشان دادن این روش ارائه شده است:
1py_string = 'Python'
2
3# contains indices 0, 1 and 2
4print(py_string[0:3]) # Pyt
5
6# contains indices 1 and 3
7print(py_string[1:5:2]) # yh
خروجی کدهای زیر به صورت ریر نمایش داده شدهاند:
Pyt yh
جمعبندی
زبان پایتون انواع قابلیتهای مختلف و ترفندهایی کاربردی برای حل مسائل متفاوت دارد. با استفاده از این ترفندها میتوان کدهای خواناتر و سادهتری ایجاد کرد؛ یادگیری انواع ترفندهای پایتون در توابع استاندارد و بسیاری از بخشهای دیگر برنامهها میتواند مهارت برنامه نویسی فرد را ارتقا بدهد. تابع Slice در پایتون و تابع Range از جمله توابع کاربردی با ترفندهایی هستند که در این مطلب به آنها و روش استفاده از آنها در برنامهها پرداخته شد. تابع Slice در پایتون دارای سه پارامتر ساده Start ،Stop و Step است که میتوان با تعریف این سه پارامتر برشهایی را از دنباله ایجاد کرد.