|
10 | 10 | درس ۰۸: ساختمانهای داده در پایتون: list و tuple
|
11 | 11 | ====================================================================================
|
12 | 12 |
|
13 |
| -.. figure:: /_static/pages/08-python-built-in-data-types-2.jpg |
| 13 | +.. figure:: /_static/pages/08-python-built-in-data-types-3.jpg |
14 | 14 | :align: center
|
15 | 15 | :alt: درس ۰۸: ساختمانهای داده در پایتون: tuple و list
|
16 | 16 | :class: page-image
|
17 | 17 |
|
18 |
| - Photo by `Natalia Y <https://unsplash.com/photos/Oxl_KBNqxGA>`__ |
| 18 | + Photo by `Maria Orlova <https://unsplash.com/photos/aO76xjr6xow>`__ |
19 | 19 |
|
20 | 20 |
|
21 |
| -از درس هفتم با انواع داده از پیش آماده در پایتون آشنا شدهایم و در این درس به ساختمانهای داده در پایتون خواهیم پرداخت. ساختمانهای داده یا Data Structures به اشیایی گفته میشود که برای نگهداری از یک مجموعه داده طراحی شدهاند و هر یک دارای ویژگی منحصربهفرد خود است. برای مثال قابل تغییر بودن، امکان حفظ ترتیب اعضا، امکان نگهداری دادههای تکراری یا تنها اجبار به نگهداری دادههای یکتا که هر یک مناسب وضعیت خاصی در برنامهنویسی هستند. این درس به بررسی چهار ساختمان داده متداول در پایتون خواهد پرداخت: لیست (list)، تاپِل (tuple)، مجموعه (set) و دیکشنری (dict) |
| 21 | +از درس هفتم با انواع داده پایه در پایتون آشنا شدهایم و در این درس به بررسی انواع داده دیگری خواهیم پرداخت که در زبانهای برنامهنویسی عموما با عنوان ساختمانهای داده بیان میشوند. ساختمانهای داده یا Data Structures به اشیایی گفته میشود که برای نگهداری از یک مجموعه داده طراحی شدهاند و هر یک دارای ویژگی منحصربهفرد خود است. برای مثال قابل تغییر بودن، امکان حفظ ترتیب اعضا، امکان نگهداری دادههای تکراری یا تنها اجبار به نگهداری دادههای یکتا که هر یک مناسب وضعیت خاصی در برنامهنویسی هستند. این درس به بررسی چهار ساختمان داده متداول در پایتون خواهد پرداخت: لیست (list)، توپِل (tuple)، مجموعه (set) و دیکشنری (dict) |
22 | 22 |
|
23 | 23 |
|
24 |
| -به منظور جلوگیری از طولانی شدن متن درس و همینطور سادگی در مطالعه، محتوا این درس در قالب دو بخش ارایه میشود که بخش نخست تنها به شرح لیست (list) و تاپِل (tuple) خواهد پرداخت. |
| 24 | +به منظور جلوگیری از طولانی شدن متن درس و همینطور سادگی در مطالعه، محتوا این درس در قالب دو بخش ارایه میشود که بخش نخست تنها به شرح لیست (list) و توپِل (tuple) خواهد پرداخت. |
25 | 25 |
|
26 | 26 |
|
27 | 27 |
|
|
40 | 40 | لیست
|
41 | 41 | ------
|
42 | 42 |
|
43 |
| -نوع «**لیست**» (List) انعطاف پذیرترین نوع آماده در پایتون میباشد. این نوع همانند رشته یک «**دنباله**» (Sequence) بوده ولی برخلاف آن یک نوع «**تغییر پذیر**» (Mutable) است. شی لیست با استفاده از کروشه ``[ ]`` ایجاد میگردد و ترتیب اعضا را حفظ و میتواند عضوهایی - **از هر نوع** - داشته باشد که توسط کاما ``,`` از یکدیگر جدا میشوند؛ نوع لیست در واقع محلی برای نگهداری اشیا گوناگون و تغییرپذیر است:: |
| 43 | +نوع «**لیست**» (List) یک نوع بسیار انعطافپذیر در پایتون میباشد. این نوع همانند رشته یک «**دنباله**» (Sequence) بوده ولی برخلاف آن یک نوع «**تغییر پذیر**» (Mutable) است. شی لیست با استفاده از کروشه ``[ ]`` ایجاد میگردد و ترتیب اعضا را حفظ و میتواند عضوهایی - **از هر نوع** - داشته باشد که توسط کاما ``,`` از یکدیگر جدا میشوند؛ نوع لیست در واقع محلی برای نگهداری اشیا گوناگون و تغییرپذیر است:: |
44 | 44 |
|
45 | 45 | >>> L = [1, 2, 3]
|
46 | 46 | >>> type(L)
|
|
201 | 201 | File "<stdin>", line 1, in <module>
|
202 | 202 | NameError: name 'a' is not defined
|
203 | 203 |
|
204 |
| -.. rubric:: انتساب چندگانه |
| 204 | + |
| 205 | +.. _python-unpacking: |
| 206 | + |
| 207 | +انتساب چندگانه |
| 208 | +~~~~~~~~~~~~~~~~~~~~ |
205 | 209 |
|
206 | 210 | میتوان یک شی لیست - یا در کل یک شی دنباله - را به تعدادی نام انتساب داد و متغیرهای جداگانهای ایجاد نمود؛ این عمل **Unpacking** خوانده میشود. در این شرایط مفسر پایتون هر عضو دنباله را با حفظ ترتیب به یکی از نامها انتساب میدهد که در حالت عادی میبایست تعداد نامها با عضوهای دنباله برابر باشد::
|
207 | 211 |
|
|
747 | 751 |
|
748 | 752 |
|
749 | 753 |
|
750 |
| -تاپل |
| 754 | +توپِل |
751 | 755 | ------
|
752 | 756 |
|
753 |
| -نوع «**تاپِل**» (Tuple) همانند نوع ``list`` است ولی با این تفاوت که تغییر پذیر **نیست** و عضوهای آن درون پرانتز ``()`` قرار داده میشوند:: |
| 757 | +نوع «**توپِل**» (Tuple) همانند نوع ``list`` است تنها با این تفاوت که تغییرپذیر **نیست** (بنابراین به نسبت مقدار حافظه کمتری مصرف میکند) و عضوهای آن درون پرانتز ``()`` قرار داده میشوند:: |
754 | 758 |
|
755 | 759 | >>> t = (1, 2, 3)
|
756 | 760 | >>> type(t)
|
|
771 | 775 | >>> t
|
772 | 776 | ()
|
773 | 777 |
|
774 |
| -در انتهای شی تاپل تک عضوی میبایست یک نماد کاما قرار داد؛ به مانند: ``(,1)``. از آنجا که از پرانتز در عبارتها نیز استفاده میشود؛ با این کار مفسر پایتون یک شی تاپل را از عبارت تشخیص می دهد:: |
| 778 | +در انتهای شی توپِل تک عضوی میبایست یک نماد کاما قرار داد؛ به مانند: ``(,1)``. از آنجا که از پرانتز در عبارتها نیز استفاده میشود؛ با این کار مفسر پایتون یک شی توپِل را از عبارت تشخیص می دهد:: |
775 | 779 |
|
776 | 780 |
|
777 | 781 | >>> (4 + 1)
|
|
792 | 796 | <class 'tuple'>
|
793 | 797 |
|
794 | 798 |
|
795 |
| -برای ایجاد شی تاپل حتی میتوان از گذاردن پرانتز صرف نظر کرد و تنها اشیا (یا عبارتها) را با کاما از یکدیگر جدا نمود:: |
| 799 | +برای ایجاد شی توپِل حتی میتوان از گذاردن پرانتز صرف نظر کرد و تنها اشیا (یا عبارتها) را با کاما از یکدیگر جدا نمود:: |
796 | 800 |
|
797 | 801 | >>> 5,
|
798 | 802 | (5,)
|
|
816 | 820 |
|
817 | 821 |
|
818 | 822 | .. note::
|
819 |
| - نوع تاپل به دلیل تغییر ناپذیر بودن، نسبت به نوع لیست در مصرف حافظه بهینهتر میباشد؛ بنابراین بهتر است در مواقعی که نیاز به تغییر خاصی در دادهها نیست از این نوع استفاده شود. همچنین در مواقعی که نباید دادهها تغییر کنند، استفاده از شی تاپل به جای لیست میتواند از آنها در برابر تغییر محافظت کند. |
| 823 | + نوع توپِل به دلیل تغییر ناپذیر بودن، نسبت به نوع لیست در مصرف حافظه بهینهتر میباشد؛ بنابراین بهتر است در مواقعی که نیاز به تغییر خاصی در دادهها نیست از این نوع استفاده شود. همچنین در مواقعی که نباید دادهها تغییر کنند، استفاده از شی توپِل به جای لیست میتواند از آنها در برابر تغییر محافظت کند. |
820 | 824 |
|
821 | 825 |
|
822 |
| -به دلیل شباهتهای بسیار شی تاپل به شی لیست از ارایه توضیحات تکراری اجتناب کرده و تنها به ذکر چند مثال در ارتباط با نوع تاپل میپردازیم:: |
| 826 | +به دلیل شباهتهای بسیار شی توپِل به شی لیست از ارایه توضیحات تکراری اجتناب کرده و تنها به ذکر چند مثال در ارتباط با نوع توپِل میپردازیم:: |
823 | 827 |
|
824 | 828 | >>> ('a', 'b', 'c') + (1 , 2, 3)
|
825 | 829 | ('a', 'b', 'c', 1, 2, 3)
|
|
890 | 894 | >>> len(t[2])
|
891 | 895 | 3
|
892 | 896 |
|
893 |
| -به دلیل ساختار ارجاعی بین اشیا در پایتون که توسط تصاویر بخش لیست نیز نمایش داده شد؛ اشیا تغییر پذیر درون شی تاپل، ویژگیهای خود را داشته و همچنان تغییر پذیر خواهند بود:: |
| 897 | +به دلیل ساختار ارجاعی بین اشیا در پایتون که توسط تصاویر بخش لیست نیز نمایش داده شد؛ اشیا تغییر پذیر درون شی توپِل، ویژگیهای خود را داشته و همچنان تغییر پذیر خواهند بود:: |
894 | 898 |
|
895 | 899 | >>> t = ('p', 'y', [1, 2, 3], 5)
|
896 | 900 |
|
|
952 | 956 | *حتما متوجه شدهاید که عضوهای دنباله تنها با نوع لیست به نام نشانهگذاری شده انتساب داده میشود.*
|
953 | 957 |
|
954 | 958 |
|
955 |
| -در هنگام انتساب متغیر تاپل به موضوع کپی نشدن اشیا تغییر پذیر توجه داشته باشید و در صورت نیاز از ماژول ``copy`` استفاده نمایید:: |
| 959 | +در هنگام انتساب متغیر توپِل به موضوع کپی نشدن اشیا تغییر پذیر توجه داشته باشید و در صورت نیاز از ماژول ``copy`` استفاده نمایید:: |
956 | 960 |
|
957 | 961 | >>> t1 = ('p', 'y', [1, 2, 3], 5)
|
958 | 962 |
|
|
981 | 985 |
|
982 | 986 |
|
983 | 987 |
|
984 |
| -همانند شی لیست؛ شی تاپل نیز به دو متد ``()index`` و ``()count`` دسترسی دارد - این موضوع با استفاده از تابع ``()dir`` قابل بررسی است:: |
| 988 | +همانند شی لیست؛ شی توپِل نیز به دو متد ``()index`` و ``()count`` دسترسی دارد - این موضوع با استفاده از تابع ``()dir`` قابل بررسی است:: |
985 | 989 |
|
986 | 990 | >>> t = ('s', 'b', 'c', 'a', 's', 'b')
|
987 | 991 |
|
|
1024 | 1028 | (END)
|
1025 | 1029 |
|
1026 | 1030 |
|
1027 |
| -هر زمان که نیاز به اِعمال تغییر در شی تاپل باشد؛ میتوان شی مورد نظر را به صورت موقت به یک شی لیست تبدیل کرد. در این حالت میتوان از ویژگی و متدهای شی لیست بهره برد و تغییرات دلخواه را اعمال کرد و در نهایت با یک تبدیل نوع دیگر دوباره به شی تاپل بازگشت. برای این منظور میتوان با استفاده از کلاس ``()list`` یک دنباله - در اینجا یک شی تاپل - را به شی لیست تبدیل کرد و در طرف دیگر توسط کلاس ``()tuple`` نیز یک دنباله - در اینجا یک شی لیست - را به شی تاپل تبدیل نمود:: |
| 1031 | +هر زمان که نیاز به اِعمال تغییر در شی توپِل باشد؛ میتوان شی مورد نظر را به صورت موقت به یک شی لیست تبدیل کرد. در این حالت میتوان از ویژگی و متدهای شی لیست بهره برد و تغییرات دلخواه را اعمال کرد و در نهایت با یک تبدیل نوع دیگر دوباره به شی توپِل بازگشت. برای این منظور میتوان با استفاده از کلاس ``()list`` یک دنباله - در اینجا یک شی توپِل - را به شی لیست تبدیل کرد و در طرف دیگر توسط کلاس ``()tuple`` نیز یک دنباله - در اینجا یک شی لیست - را به شی توپِل تبدیل نمود:: |
1028 | 1032 |
|
1029 | 1033 | >>> t = (1, 2, 3)
|
1030 | 1034 | >>> type(t)
|
|
1045 | 1049 | ('python', 1, 2, 3)
|
1046 | 1050 |
|
1047 | 1051 |
|
1048 |
| -البته در مواقعی که میخواهید عضوهای درون یک شی تاپل را مرتب (Sort) کنید، نیازی به تبدیل نوع لیست نمیباشد و میتوانید از تابع ``()sorted`` استفاده نمایید؛ این تابع مطابق آنچه که پیش از این معرفی شد یک شی تاپل را میگیرد و یک شی لیست با همان عضوها اما مرتب شده را برمیگرداند:: |
| 1052 | +البته در مواقعی که میخواهید عضوهای درون یک شی توپِل را مرتب (Sort) کنید، نیازی به تبدیل نوع لیست نمیباشد و میتوانید از تابع ``()sorted`` استفاده نمایید؛ این تابع مطابق آنچه که پیش از این معرفی شد یک شی توپِل را میگیرد و یک شی لیست با همان عضوها اما مرتب شده را برمیگرداند:: |
1049 | 1053 |
|
1050 | 1054 | >>> t = ('a', 'D', 'c', 'B', 'e', 'f', 'G', 'h')
|
1051 | 1055 |
|
1052 | 1056 | >>> sorted(t, key=str.lower, reverse=True)
|
1053 | 1057 | ['h', 'G', 'f', 'e', 'D', 'c', 'B', 'a']
|
1054 | 1058 |
|
1055 | 1059 |
|
1056 |
| -کلاس ``()tuple`` بدون آرگومان یک شی تاپل خالی را ایجاد میکند:: |
| 1060 | +کلاس ``()tuple`` بدون آرگومان یک شی توپِل خالی را ایجاد میکند:: |
1057 | 1061 |
|
1058 | 1062 | >>> t = tuple()
|
1059 | 1063 | >>> t
|
|
0 commit comments