|
1 | 1 | .. role:: emoji-size
|
2 | 2 |
|
3 | 3 | .. meta::
|
4 |
| - :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامهنویسی پایتون - درس هشتم: ساختمان داده در پایتون، list و tuple |
5 |
| - :keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, انواع شی, انواع داده, ساختمان داده در پایتون, list در پایتون, tuple در پایتون |
| 4 | + :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامهنویسی پایتون - درس هشتم: ساختمانهای داده در پایتون، list و tuple |
| 5 | + :keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, انواع شی, انواع داده, ساختمانهای داده در پایتون, list در پایتون, tuple در پایتون |
6 | 6 |
|
7 | 7 |
|
8 | 8 | .. _lesson-08.1:
|
9 | 9 |
|
10 |
| -درس ۰۸: ساختمان داده در پایتون: list و tuple |
| 10 | +درس ۰۸: ساختمانهای داده در پایتون: list و tuple |
11 | 11 | ====================================================================================
|
12 | 12 |
|
13 | 13 | .. figure:: /_static/pages/08-python-built-in-data-types-2.jpg
|
14 | 14 | :align: center
|
15 |
| - :alt: درس ۰۸: ساختمان داده در پایتون: tuple و list |
| 15 | + :alt: درس ۰۸: ساختمانهای داده در پایتون: tuple و list |
16 | 16 | :class: page-image
|
17 | 17 |
|
18 | 18 | Photo by `Natalia Y <https://unsplash.com/photos/Oxl_KBNqxGA>`__
|
|
35 | 35 |
|
36 | 36 | ----
|
37 | 37 |
|
| 38 | +.. _python-list: |
38 | 39 |
|
39 | 40 | لیست
|
40 | 41 | ------
|
41 | 42 |
|
42 |
| -نوع «**لیست**» (List) انعطاف پذیرترین نوع آماده در پایتون میباشد. این نوع همانند رشته یک «**دنباله**» (Sequence) بوده ولی برخلاف آن یک نوع «**تغییر پذیر**» (Mutable) است. شی لیست با استفاده از کروشه ``[ ]`` ایجاد میگردد و میتواند عضوهایی - **با هر نوع** - داشته باشد که توسط کاما ``,`` از یکدیگر جدا میشوند؛ نوع لیست در واقع محلی برای نگهداری اشیا گوناگون است:: |
| 43 | +نوع «**لیست**» (List) انعطاف پذیرترین نوع آماده در پایتون میباشد. این نوع همانند رشته یک «**دنباله**» (Sequence) بوده ولی برخلاف آن یک نوع «**تغییر پذیر**» (Mutable) است. شی لیست با استفاده از کروشه ``[ ]`` ایجاد میگردد و ترتیب اعضا را حفظ و میتواند عضوهایی - **از هر نوع** - داشته باشد که توسط کاما ``,`` از یکدیگر جدا میشوند؛ نوع لیست در واقع محلی برای نگهداری اشیا گوناگون و تغییرپذیر است:: |
43 | 44 |
|
44 | 45 | >>> L = [1, 2, 3]
|
45 | 46 | >>> type(L)
|
|
169 | 170 | >>> L
|
170 | 171 | [0, 1, 5, 6]
|
171 | 172 |
|
| 173 | + |
| 174 | +.. _python-del: |
172 | 175 |
|
173 |
| -.. rubric:: دستور ``del`` |
| 176 | +دستور ``del`` |
| 177 | +~~~~~~~~~~~~~~~~~ |
174 | 178 |
|
175 | 179 | با استفاده از دستور ``del`` [`اسناد پایتون <http://docs.python.org/3/reference/simple_stmts.html#del>`__] نیز میتوان یک عضو یا یک تکه از شی لیست را حذف کرد::
|
176 | 180 |
|
|
184 | 188 | >>> L
|
185 | 189 | ['a', 'f', 'g']
|
186 | 190 |
|
187 |
| -همچنین میتوانیم از این دستور برای حذف کامل یک متغیر استفاده نماییم. با حدف یک متغیر، ارجاع آن به شی نیز حذف میشود و چنانچه هیچ ارجاع دیگری به آن شی وجود نداشته باشد، شیای که متغیر به آن ارجاع داشت نیز حذف میگردد:: |
| 191 | +همچنین میتوانیم از این دستور برای حذف کامل یک متغیر استفاده نماییم. با حدف یک متغیر، ارجاع آن به شی نیز حذف میشود و چنانچه هیچ ارجاع دیگری به آن شی وجود نداشته باشد، شیای که متغیر به آن ارجاع داشت نیز از حافظه حذف میگردد:: |
188 | 192 |
|
189 | 193 | >>> a = 5
|
190 | 194 | >>> a
|
|
267 | 271 | >>> d
|
268 | 272 | [4.4]
|
269 | 273 |
|
| 274 | + |
| 275 | +.. _python-copy: |
270 | 276 |
|
271 |
| -.. rubric:: کپی کردن |
| 277 | +کپی کردن |
| 278 | +~~~~~~~~~~~~~~~~ |
272 | 279 |
|
273 | 280 | همانند دیگر اشیا میتوان با انتساب یک متغیر موجود از شی لیست به یک نام جدید، متغیر دیگری از این نوع شی ایجاد کرد. البته همانطور که پیشتر نیز بیان شده است؛ در این حالت شی کپی نمیگردد و تنها یک ارجاع جدید از این نام جدید به شی آن متغیر داده میشود. این موضوع با استفاده از تابع ``()id`` [`اسناد پایتون <http://docs.python.org/3/library/functions.html#id>`__] قابل آزمودن است؛ خروجی این تابع برابر نشانی شی در حافظه میباشد و بدیهی است که دو مقدار id یکسان برای دو متغیر نشان از یکی بودن شی آنهاست::
|
274 | 281 |
|
|
393 | 400 | >>> id(L2[2])
|
394 | 401 | 140402651379080
|
395 | 402 |
|
396 |
| -.. rubric:: عملگرها برای لیست |
| 403 | + |
| 404 | +.. _python-list-operators: |
| 405 | + |
| 406 | +عملگرها برای لیست |
| 407 | +~~~~~~~~~~~~~~~~~~~~~~~~~ |
397 | 408 |
|
398 | 409 | میتوان از عملگرهای ``+`` (برای پیوند لیستها) و ``*`` (برای تکرار عضوهای لیست) بهره برد::
|
399 | 410 |
|
|
423 | 434 | >>> [1, 2] in L
|
424 | 435 | True
|
425 | 436 |
|
426 |
| -.. rubric:: تفاوت عملگرهای ``==`` و ``is`` |
| 437 | + |
| 438 | +.. _python-is-va-equal: |
| 439 | + |
| 440 | +تفاوت عملگرهای ``==`` و ``is`` |
| 441 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
427 | 442 |
|
428 | 443 | نکتهای که در درسهای پیش مطرح نشد، بیان تفاوت بین عملگر برابری و عملگر هویت است. پیش از ارایه توضیح به نمونه کد پایین توجه نمایید::
|
429 | 444 |
|
|
473 | 488 | >>> L1 is L2 # False!
|
474 | 489 | False
|
475 | 490 |
|
| 491 | +.. _python-convert-to-list: |
476 | 492 |
|
477 |
| -.. rubric:: تبدیل به شی لیست |
| 493 | +تبدیل به شی لیست |
| 494 | +~~~~~~~~~~~~~~~~~~~~~~~~~ |
478 | 495 |
|
479 | 496 | با استفاده از کلاس ``()list`` [`اسناد پایتون <http://docs.python.org/3/library/functions.html#func-list>`__] میتوان یک شی لیست ایجاد کرد یا اشیایی که از نوع دنباله هستند را به یک شی لیست تبدیل نمود::
|
480 | 497 |
|
|
496 | 513 | []
|
497 | 514 |
|
498 | 515 |
|
| 516 | +.. _python-list-methods: |
499 | 517 |
|
500 |
| - |
501 |
| -.. rubric:: متدهای کاربردی یک شی لیست |
| 518 | +متدهای کاربردی یک شی لیست |
| 519 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
502 | 520 |
|
503 | 521 | شی لیست تغییر پذیر است و متدهای آن برخلاف شی رشته یک شی جدید تغییر یافته را برنمیگردانند بلکه تغییرات را بر روی همان شی ایجاد میکنند.
|
504 | 522 |
|
|
514 | 532 | >>> L
|
515 | 533 | [1, 2, 3, 4, ['a', 'b']]
|
516 | 534 |
|
517 |
| - عملکرد این متد (``(L.append(x``) همانند عمل ``[L + [x`` است:: |
| 535 | + عملکرد این متد ``(L.append(x`` همانند عمل ``[L + [x`` است:: |
518 | 536 |
|
519 | 537 | >>> L = [1, 2, 3]
|
520 | 538 | >>> L + [4]
|
|
538 | 556 | [1, 2, 3, 'p', 'y']
|
539 | 557 |
|
540 | 558 |
|
541 |
| -* ``(insert(i, x`` - یک عضو جدید (مانند ``x``) را در موقعیتی از لیست با اندیس دلخواه (مانند ``i``) قرار میدهد:: |
| 559 | +* ``(insert(i, x`` - یک عضو جدید مانند ``x`` را در موقعیتی از لیست با اندیس دلخواه مانند ``i`` قرار میدهد:: |
542 | 560 |
|
543 | 561 | >>> L = [1, 2, 3]
|
544 | 562 |
|
|
700 | 718 | >>> sorted(L, key=str.lower, reverse=True)
|
701 | 719 | ['h', 'G', 'f', 'e', 'D', 'c', 'B', 'a']
|
702 | 720 |
|
| 721 | + |
| 722 | +.. _python-stack-with-list: |
703 | 723 |
|
704 |
| -.. rubric:: ایجاد پشته |
| 724 | +ایجاد پشته |
| 725 | +~~~~~~~~~~~~~~~~~ |
705 | 726 |
|
706 | 727 | «پشته» (`Stack <https://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29>`_) ساختاری برای نگهداری موقت دادهها میباشد به شکلی که آخرین دادهای که در آن قرار میگیرد نخستین دادهای خواهد بود که خارج میگردد؛ این شیوه سازماندهی LIFO یا Last In, First Out خوانده میشود. پشته تنها از دو عمل (یا متد) پشتیبانی میکند: **push** که دادهای را بالای تمام دادههای موجود در آن قرار میدهد و **pop** که بالاترین داده را از آن خارج میکند.
|
707 | 728 |
|
|
0 commit comments