هنوز در دنیای برنامهنویسی، پایتون به عنوان زبانی قدرتمند و کاربرپسند شناخته میشود زیرا پایتون در «علم داده» (Data Science) برای تجزیه و تحلیل اطلاعات و برای تولید الگوریتمهای «یادگیری ماشین» (Machine Learning)، در «یادگیری عمیق» (Deep Learning) برای ایجاد مدلهای شبکههای عصبی و حتی در توسعه نرمافزار برای نوشتن برنامههای کاربردی بسیار پراستفاده است. یکی از ویژگیهای منحصر به فرد پایتون این است که از انواع گستردهای از ساختارهای داده مانند لیستها، تاپلها، دیکشنریها و غیره پشتیبانی میکند. این پشتیبانی گسترده از انواع ساختارهای داده همراه با تعداد زیادی متد «داخلی» (Built-In) حل کردن چالشهای برنامهنویسی را بسیار آسان میکند. اما متاسفانه تازهکارها یا حتی برنامهنویسهای با تجربه و قدیمی نیز از همه این متدها آگاهی ندارند. در این مطلب از مجله فرادرس درباره متدهای لیست در پایتون بهعنوان یکی از این ساختارهای مهم داده توضیحاتی خواهیم داد.
تا حد امکان در مطلب روی بیشترین تعداد متدهای لیست در پایتون تمرکز خواهیم کرد. متدهایی که شناختن آنها برای برنامهنویسان ضروری است و برای حل مسائل درگیر با لیستها که تقریبا شامل همه مسائل دنیای واقعی میشود، کمک بسیار زیادی به برنامهنویسان میکنند. چه دانشمند داده باشید و چه برنامهنویسی حرفهای تا آخر این مطلب به دانشی قوی درباره متدهای لیست در پایتون مجهز خواهید شد که باعث میشود پروژههای بعدی پایتون را بسیار آسانتر حل کنید.
اهدافی که در این مقاله دنبال میکنیم در ادامه فهرست شدهاند.
- بررسی لیست و اصول آن
- درک تفاوت بین تابع و متد در پایتون
- پوشش مهمترین توابع و متدهای لیست در پایتون
لیست در پایتون چست؟
لیست در پایتون گزینه اصلی و شاید رایجترین ساختار برای ذخیره دادهها باشد.
- لیست در پایتون به عنوان مجموعهای از اشیا که منظم، تغییرپذیر و با قابلیت «تنوعپذیری» (Heterogeneous) یا ذخیرهسازی انواع مختلفی داده تعریف شده است.
- نظم در لیستها به معنی این است که مجموعهسازی اشیا از نظم خاصی پیروی میکند.
- تغییرپذیر به معنی این است که لیست قابلیت حذف و اضافه یا تغییر در نظم دادهها را دارد.
- تنوعپذیری اشاره به این مطلب دارد که قادر خواهید بود هر نوعی از دادهها یا اشیاء را با یکدیگر درون هر لیستی ترکیب و تطبیق دهید. لیست میتواند هم زمان شامل اعداد int، فلوت، رشتهها یا هر نوع دادهی دیگری باشد.
- لیستها شامل یک جفت براکت باز و بسته []
میشوند بههمراه عناصری که درون لیست قرار گرفتهاند. عناصر درون لیست با کاما از یکدیگر جدا میشوند. وجود عنصر داخل لیست الزامی نیست.
- لیستها اشیایی پیمایشپذیر هستند. یعنی میتوان روی همه اعضای لیست پیمایش انجام داد.
- لیستها مانند آرایههایی با اندازه پویا هستند که در دیگر زبانهای برنامهنویسی مانند ++C و Java پیدا میشوند.
متدهای لیست در پایتون
پایتون چندین متد لیست داخلی دارد که برای اجرای وظایف مرتبط با لیست که بهصورت مکرر رخ میدهند استفاده میشوند. به عنوان نمونه، اگر میل داشته باشید که موردی را به لیست خود اضافه کنید، متد append()
را استفاده میکنید. تا انتهای این مطلب با تعداد زیادی متد مخصوص استفاده در لیستهای پایتون آشنا خواهید شد.
در انتهای این بخش به بیان تفاوت بین توابع و متدهای لیست در پایتون پرداختهایم.
در این مطلب، درباره متدهای لیست در پایتون صحبت خواهیم کرد. فهرستی از این متدها در جدول زیر آوردهایم. تلاش میکنیم که به شفافترین شکل ممکن متدها را توضیح دهیم تا به درک عالی درباره معنی، پارامترهای مورد استفاده و سینتکس هر کدام از متدها برسیم و درک شما را از این متدها با کمک مثالهای مختلف به همراه کد تثبیت خواهیم کرد.
به لیستی از متدها که در ادامه بررسی خواهیم کرد و در زیر نمایش داده شدهاند، لطفا توجه کنید.
متدهای لیست در پایتون | توضیحات |
append() | برای اضافه کردن یک عنصر به لیست استفاده میشود. |
extend() | عناصر لیستی را به لیست دیگری اضافه میکند. |
insert() | عنصری را به لیست وارد میکند. |
remove() | عنصری را از لیست حذف میکند. |
index() | کوچکترین ایندکس عنصری را برمیگرداند. |
count() | تعداد تکرار عنصری را در لیست برمیگرداند. |
pop() | عنصر موجود در ایندکسی که گرفته را حذف میکند. |
reverse() | چیدمان عناصر لیست را معکوس میکند. |
sort() | عناصر لیست را به ترتیب میچیند (صعودی یا نزولی). |
copy() | یک کپی سطحی از لیست ایجاد میکند. |
clear() | همه عناصر لیست را حذف میکند. |
max() | بزرگترین عنصر لیست را برمیگرداند. |
min() | کوچکترین عنصر لیست را برمیگرداند. |
len() | طول شیئی که دریافت کرده را محاسبه میکند و برمیگرداند. |
در ادامه هرکدام از متدهای ذکر شده در بالا را یک به یک توضیح خواهیم داد.
متد append در لیست های پایتون
متد append()
برای اضافه کردن فقط یک عنصر به لیست موجود استفاده میشود. در واقع بجای آنکه لیست جدیدی برگرداند، لیست اصلی موجود را اصلاح میکند. متد append()
در لیستهای پایتون در زمانی که شیئی به متد موجود ارسال شده باشد، برای افزودن این شی به لیست کاربرد خواهد داشت. از این متد برای افزودن عنصری به آخر لیست استفاده میشود.
شکل ساده و اولیه سینتکس متد append()
را در ادامه آوردهایم.
1list.append(item)
2
3append() Parameters
متد append()
عنصری را به عنوان ورودی قبول میکند و سپس آن را به انتهای لیست مورد نظر اضافه میکند. عنصر مورد اشاره هر چیزی مانند لیست دیگری، رشتهای، عدد، دیکشنری یا غیره میتواند باشد.
برگشت دادن مقادیر از متد append
همانطور که قبلا اشاره شد، متد append()
اصلاحاتی را فقط روی لیست اصلی اعمال میکند. هیچ مقداری را برنمیگرداند. در ادامه به دو مثال خواهیم پرداخت. در مثال اول عنصری را به لیستی خواهیم افزود و در مثال دوم افزودن لیستی دیگر را به لیست موجود توضیح خواهیم داد.
کد پایین اضافه کردن عنصری به لیست را نمایش میدهد.
1# animal list
2animal = ['cat', 'dog', 'rabbit']
3
4# an element is added
5animal.append('guinea pig')
6
7#Updated Animal List
8print('Updated animal list: ', animal)
وقتی که برنامه را اجرا کنید، خروجی که تولید میشود به شکل زیر خواهد بود.
Updated animal list: ['cat', 'dog', 'rabbit', 'guinea pig']
آیا می شود با استفاده از متد append لیستی را به لیست دیگری اضافه کرد؟
در ابتدا به کد زیر توجه کنید.
1# animal list
2animal = ['cat', 'dog', 'rabbit']
3
4# another list of wild animals
5wild_animal = ['tiger', 'fox']
6
7# adding wild_animal list to animal list
8animal.append(wild_animal)
9
10#Updated List
11print('Updated animal list: ', animal)
وقتی که برنامه بالا را اجرا کنید، خروجی تولید شده به شکل زیر خواهد بود.
Updated animal list: ['cat', 'dog', 'rabbit', ['tiger', 'fox']]
لازم است به این نکته توجه کنید که یک عنصر مجزا مانند لیست wild_animal
در برنامه بالا به لیست animal
اضافه شده است. اگر میخواهید که عناصر لیستی را به لیست دیگری اضافه کنید به جای اینکه خود لیست را اضافه کنید باید از متد extend()
که در بخش بعدی توضیح خواهیم داد استفاده کنید.
متد extend در لیست های پایتون
متد extend()
در پایتون لیست اول را بهوسیله افزودن همه عناصر لیست دوم به انتهای لیست اول گسترش میدهد. لیست دوم به عنوان آرگومان به این متد extend()
ارسال میشود.
سینتکس پایه متد extend()
را در زیر نمایش دادهایم.
در اینجا همه اعضای list2
به انتهای list1
اضافه میشوند.
همانطور که قبلا اشاره شد، متد extend()
فقط یک آرگومان میپذیرد که آنهم از جنس لیست است و سپس مقادیر آن آرگومان را به انتهای لیست خود میافزاید. اگر نیاز دارید که اعضای سایر نوع دادههای بومی پایتون را مانند تاپل یا مجموعه را به لیست خود اضافه کنید، میتوانید مطابق کد نوشته شده در زیر عمل کنید.
1# add elements of a tuple to list
2list.extend(list(tuple_type))
3
4# or even like this
5list.extend(tuple_type)
6
7Return Value from extend()
در پایتون، متد extend()
نیز همانند متد append()
تغییرات را فقط روی لیست اصلی اعمال میکند و هیچ مقداری را برنمیگرداند.
در کد زیر مثالی را درباره استفاده از متد extend()
آماده کردهایم.
1# language list
2language = ['French', 'English', 'German']
3
4# another list of language
5language1 = ['Spanish', 'Portuguese']
6
7language.extend(language1)
8
9# Extended List
10print('Language List: ', language)
وقتی که برنامه نوشته شده در بالا را اجرا کنید، خروجی تولید شده به شکل زیر خواهد بود.
Language List: ['French', 'English', 'German', 'Spanish', 'Portuguese']
تفاوت بین متدهای append و extend چیست؟
تفاوت اصلی بین متدهای append و extend این است که متد append()
فقط یک عنصر را به لیست اضافه میکند درحالی متد extend()
عناصر لیستی که به عنوان آرگومان گرفته است را به لیست اول الحاق میکند. البته که آرگومانی که متد extend()
میپذیرد لازم نیست که حتما از نوع لیست باشد اما باید حتما پیایشپذیر باشد.
متد insert در لیست های پایتون
متد insert()
در پایتون به قراردادن عنصری در مکان مشخص شده در لیست کمک میکند. سینتکس پایه این متد به شکل زیر است.
1list.insert(index, element)
پارامترهای متد insert
متد insert()
فقط ۲ پارامتر میپذیرد که باید طبق جایگاهی که در بالا میبینید به این متد ارسال شوند.
- Index: این پارامتر محلی را نشان میدهد که عنصر مورد نظر باید در آنجا بنشیند.
- Element: عنصری است که باید درون لیست جایگیر شود.
مقدار برگشتی متد insert
متد insert()
دقیقا مانند متدهای extend()
و append()
فقط عنصری که به عنوان پارامتر برایش ارسال شده را وارد لیست میکند و هیچ مقداری را برگشت نمیدهد. در مثال زیر جایگزاری مقداری را در لیست به کمک متد insert()
پیادهسازی کردهایم.
1# vowel list
2vowel = ['a', 'e', 'i', 'u']
3
4# inserting element to list at 4th position
5vowel.insert(3, 'o')
6
7print('Updated List: ', vowel)
زمانی که کد بالا را اجرا کنید، خروجی تولید شده به شکل زیر خواهد بود.
Updated List: ['a', 'e', 'i', 'o', 'u']
نکته مهمی در لیستها وجود دارد که در این متد باید مورد توجه قرار گیرد، توجه کنید که ایندکسها در پایتون از ۰ شروع میشوند نه از عدد ۱. به عنوان مثال، در موردی که میخواهید عنصری را در خانه چهارم لیستی وارد کنید، باید عدد ۳ را به عنوان پارامتر ایندکس به متد ارسال کنید. به همین شکل، اگر بخواهید عنصری را در جایگاه نهم لیستی وارد کنید باید از عدد ۸ به عنوان ایندکس استفاده کنید.
متد remove در لیست های پایتون
متد remove()
برای این استفاده میشود بدنبال عنصر گرفته شده به عنوان پارامتر بگردد و اولین گزینه همسان پیدا شده در لیست را حذف کند.
سینکس پایه این متد در کد زیر آمده است.
پارامتر متد remove()
به این شرح است، متد remove()
فقط یک آرگومان را به عنوان ورودی میگیرد که قرار است از لیست حذف شود. در اول متد هم قبل از نقطه نام لیستی را میآوریم که این متد باید روی آن لیست عملیات خود را انجام دهد.
در موردی که آرگومانی دریافت شده توسط متد remove()
در لیست هدف وجود نداشته باشد، پایتون خطای استثنای valueError
را برمیگرداند.
متد remove چه مقداری را برمی گرداند؟
متد remove()
فقط کار حذف کردن عنصر گرفته شده را در لیست انجام میدهد. این متد هیچ مقداری را برنمیگرداند.
در کد زیر مثالی را پیادهسازی کردهایم درباره حذف کردن عنصری که به متد remove()
داده شده.
1# animal list
2animal = ['cat', 'dog', 'rabbit', 'guinea pig']
3
4# 'rabbit' element is removed
5animal.remove('rabbit')
6
7#Updated Animal List
8print('Updated animal list: ', animal)
هنگامی که کد بالا اجرا شود، خروجی زیر را تولید خواهد کرد.
Updated animal list: ['cat', 'dog', 'guinea pig']
متد remove()
فقط عنصری را حذف میکند که به عنوان آرگومان گرفته است. اما درصورتی که نیاز داشته باشید عنصرها را با توجه به ایندکس خاصی مثلا هفتمین یا اولین عنصر را حذف کنید باید از متد pop()
یا عملگر del
استفاده کنید.
متد remove()
برای «نوع دادههای اصلی» (Native Datatypes) زیر استفاده میشود.
- «لیستها» (Lists)
- «رشتهها» (Strings)
- «دیکشنریها» (Dictionaries)
- «مجموعهها» (Sets)
- «تاپلها» (Tuples)
- و سایر نوع دادههای اصلی
متد index در لیست های پایتون
متد index()
آرگومانی میپذیرد، به دنبال آرگومان خود در لیست میگردد و در آخر کوچکترین ایندکس یا ایندکس اولین جایگاهی که آرگومان مورد نظر را پیدا کرده برمیگرداند. باید توجه کرد که برای تکرار هر آرگومان در لیستها هیچ محدودیتی وجود ندارد. به بیان سادهتر، متد index()
از جایگاه صفر لیست یا خانه اول لیست شروع به جستوجو به دنبال آرگومان گرفته شده خود، میکند. فرقی ندارد که این آرگومان ۱ بار در لیست وجود داشته باشد یا هزاران بار تکرار شده باشد. اولین باری که عنصر همسان با آرگومان خود را پیدا کند شماره جایگاه را به عنوان خروجی برمیگرداند.
سینتکس پایه متد index()
به صورت زیر میباشد.
پارامتر متد index()
به این شرح است که فقط یک پارامتر را میپذیرد. در تکه کد بالا element
همان آرگومانی است که باید به عنوان الگوی جستوجو استفاده شود.
مقدار برگشتی متد index
متد index()
همانطور که از آن انتظار میرود شماره ایندکس اولین عنصری را که در لیست پیدا کرده برمیگرداند. در موردی که هیچ عنصر همسانی با آرگومان متد index()
پیدا نشود، پایتون خطای ValueError
برمیگرداند که به این معناست چنین عنصری در لیست وجود ندارد.
در کد زیر مثالی از بابت جستوجو کردن به دنبال جایگاه عنصر خاصی را در لیست آوردهایم.
1# vowels list
2vowels = ['a', 'e', 'i', 'o', 'i', 'u']
3
4# element 'e' is searched
5index = vowels.index('e')
6
7# index of 'e' is printed
8print('The index of e:', index)
9
10# element 'i' is searched
11index = vowels.index('i')
12
13# only the first index of the element is printed
14print('The index of i:', index)
زمانی که کد نمونه بالا را اجرا کنید، خروجی تولید شده زیر را مشاهده خواهید کرد.
The index of e: 1 The index of i: 2
این متد همچنین روی نوع دادههای اصلی تاپل و رشته نیز کار میکند.
متد count در لیست های پایتون
متد count()
برای شمردن تعداد تکرارهای عنصری در لیست استفاده میشود. به عبارت سادهتر، متد count()
در ابتدا تعداد ظاهر شدن عنصر خاصی را در لیست میشمارد و سپس تعداد کل را برمیگرداند.
سینتکس پایه متد count()
به صورت زیر است.
پارامترهای متد count()
به این صورت است که فقط یک پارامتر دارد و آن هم عنصری است که باید در لیست به دنبال تکرارهای آن باشد.
مقادیر برگشتی متد count
متد count()
تعداد تکرار یک عنصر خاص را که به عنوان آرگومان به این متد داده شده میشمارد نتیجه این شمارش را برمیگرداند. اگر عنصر داده شده در لیست وجود نداشته باشد، پایتون، خطا بر نمیگرداند و به سادگی فقط مقدار صفر را نمایش میدهد.
در کد زیر چنین فرض گرفتهایم که در لیستی به دنبال تعداد تکرار عنصری خاص میگردیم.
1# vowels list
2vowels = ['a', 'e', 'i', 'o', 'i', 'u']
3
4# count element 'i'
5count = vowels.count('i')
6
7# print count
8print('The count of i is:', count)
9
10# count element 'p'
11count = vowels.count('p')
12
13# print count
14print('The count of p is:', count)
زمانی که کد بالا را اجرا کنیم، خروجی زیر تولید میشود.
The count of i is: 2 The count of p is: 0
از این متد میتوان در نوع داده اصلی تاپل نیز استفاده کرد.
متد pop در لیست های پایتون
متد pop()
عنصری را در ایندکسی که گرفته است اول از لیست حذف میکند و سپس آن را برمیگرداند. ایندکس جایگاه هدف در لیست بهصورت آرگومان به متد ارسال میشود.
سینتکس پایه متد pop()
به شکل زیر است.
پارامترهای مورد استفاده متد pop()
به این شرح هستند که متد، فقط یک آرگومان ورودی دارد. آرگومان همان ایندکسی را نشان میدهد که باید محتویاتش در لیست حذف شود.
وقتی ایندکسی که به متد pop()
ارسال شده بود بیشتر از محدوده اعضای لیست بود خطای استثنای IndexError: pop index out of range
توسط پایتون به کاربر برگشت داده میشود.
ارسال پارامتر به متد pop()
اختیاری است. در مواردی که مقدار آرگومان متد pop()
خالی باشد و متد بدون آرگومان اجرا شود مقدار ایندکس -1
بهصورت پیشفرض در متد قرار میگیرد که در نتیجه آن عملیات متد pop()
بر روی آخرین عضو لیست اعمال میشود.
مقدار برگشتی متد pop
متد pop()
مقداری برگشتی دارد. متد مقدار موجود در ایندکس داده شده در لیست را برمیگرداند. جدا از این، عنصر موجود در ایندکس داده شده در لیست را حذف میکند.
مثالی را در نظر بگیرید که در آن میخواهیم عنصری موجود، در ایندکس داده شده در لیست را بر روی مانیتور چاپ کنیم. مثال مورد نظر را در کد زیر پیادهسازی کردهایم.
1# programming language list
2language = ['Python', 'Java', 'C++', 'French', 'C']
3
4# Return value from pop()
5# When 3 is passed
6return_value = language.pop(3)
7print('Return Value: ', return_value)
8
9# Updated List
10print('Updated List: ', language)
وقتی که کد بالا را اجرا کنیم خروجی تولید شده به شکل زیر نمایش داده میشود.
Return Value: French Updated List: ['Python', 'Java', 'C++', 'C']
متد pop()
عنصری را که در ایندکس داده شده بهعنوان آرگومان در لیست پیدا میکند، حذف میکند و برمیگرداند اما در مواردی که میخواهید عنصر مشخصی را فارق از جایگاهش در لیست حذف کنید لازم است که از متد remove()
استفاده کنید.
متد reverse در لیست های پایتون
متد reverse()
به معکوس کردن نظم عناصر در لیست داده شده کمک میکند.
سینتکس پایه متد reverse()
به شکل زیر است.
درباره پارامترهای متد reverse()
باید بیان کنیم که این متد هیچ پارامتری نمیگیرد.
مقدار برگشتی متد reverse
متد reverse()
همانطور که هیج مقداری را به عنوان آرگومان نمیگیرد، هیچ مقداری را نیز به عنوان خروجی برنمیگرداند. فقط متدی برای معکوس کردن چیدمان عناصر و بروز رسانی لیست با نظم جدید است.
توجه کنید که به این متد باید لیستی را که قرار است عملیات بر روی آن اجرا شود معرفی کنیم. اما این لیست به صورت آرگومان یعنی در وسط پرانتزهای جلوی نام متد قرار نخواهد گرفت. بلکه نام لیست قبل از نام متد میآید و بین آنها نقطهای قرار میگیرد. این یکی از تفاوتهای روش استفاده از «تابع» (Function) و «متد» (Method) است.
در مثال زیر نحوه استفاده از این متد را به صورت کد پیادهسازی کردهایم تا ببینید چگونه لیستی معکوس میشود.
1# Operating System List
2os = ['Windows', 'macOS', 'Linux']
3print('Original List:', os)
4
5# List Reverse
6os.reverse()
7
8# updated list
9print('Updated List:', os)
زمانی که کد بالا را اجرا کنید. خروجی تولید شده به شکل زیر خواهد بود.
Original List: ['Windows', 'macOS', 'Linux'] Updated List: ['Linux', 'macOS', 'Windows']
متد sort در لیست های پایتون
پایتون هم مثل متد sort()
در ++C و Java و زبانهای دیگر برنامهنویسی متد sort()
درونی مخصوص به خود را دارد. متد sort()
برای ایجاد چیدمان مرتب دادهها در لیست بکار میرود. این نظم عناصر در لیست میتواند از کوچک به بزرگ یا از بزرگ به کوچک باشد.
سینتکس متد sort()
را در سه شکل مختلف میتوان پیادهسازی کرد که در ادامه فهرست کردهایم.
- list_name.sort()
– این سینتکس عناصر داخل لیست را به ترتیب «صعودی» (Ascending) منظم میکند.
- list_name.sort(reverse=True)
– این سینتکس عناصر لیست را به ترتیب «نزولی» (Descending) منظم میکند.
- list_name.sort(key=…, reverse=…)
– این سینتکس لیست را با توجه به انتخاب کاربر منظم میکند.
پارامترهای متد sort()
به این شرح هستند که به صورت پیشفرض متد sort()
در پایتون نیازی به پارامتر اضافی ندارد اما دو پارامتر اختیاری وجود دارند.
- Reverse – اگر این پارامتر مقدار «صحیح» (True) داشته باشد لیست با نظم «نزولی» (Descending) چیدهخواهد شد.
- Key – این پارامتر به عنوان کلید برای مقایسه چیدمان رفتار خواهد کرد.
مقادیر برگشتی متد sort
متد sort()
به عنوان مقدار برگشتی همان لیستی را که بهصورت منظم با توجه به پارامترهایی که دریافت کرده چیده است و بروز رسانی کرده است را برمیگرداند. لیست نامنظم قبلی با نظم قبلی دیگر وجود نخواهد داشت.
پیاده سازی متد list_name.sort
این سینتکس عناصر داخل لیست را به ترتیب صعودی منظم میکند. بیشترین کاربرد این متد در منظم چیدن لیستی از اعداد صحیح، اعداد اعشاری، رشتهها و چیزهای دیگر است. در کد نمایش داده شده پایین مثالی از اعمال چیدمان صعودی یا از کوچک به بزرگ را روی لیستی پیادهسازی کردهایم.
1# List of Integers
2numbers = [1, 3, 4, 2]
3 # Sorting list of Integers
4numbers.sort()
5
6print(numbers)
7
8# List of Floating point numbers
9decimalnumber = [2.01, 2.00, 3.67, 3.28, 1.68]
10
11# Sorting list of Floating point numbers
12decimalnumber.sort()
13
14print(decimalnumber)
15
16# List of strings
17words = ["Geeks", "For", "Geeks"]
18
19# Sorting list of strings
20words.sort()
21
22print(words)
خروجی تولید شده توسط کد بالا به شکل زیر خواهد بود.
[1, 2, 3, 4] [1.68, 2.0, 2.01, 3.28, 3.67] ['For', 'Geeks', 'Geeks']
پیاده سازی متد sort درحالی که پارامتر reverse برابر True باشد
این سینتکس عناصر لیست را به ترتیب نزولی منظم میکند. برای این سینتکس هم در ادامه مثالی پیادهسازی کردهایم. به کد زیر توجه کنید.
1# List of Integers
2numbers = [1, 3, 4, 2]
3
4# Sorting list of Integers
5numbers.sort(reverse=True)
6
7print(numbers)
8
9# List of Floating point numbers
10decimalnumber = [2.01, 2.00, 3.67, 3.28, 1.68]
11
12# Sorting list of Floating point numbers
13decimalnumber.sort(reverse=True)
14
15print(decimalnumber)
16
17# List of strings
18words = ["Geeks", "For", "Geeks"]
19
20# Sorting list of strings
21words.sort(reverse=True)
22
23print(words)
خروجی تولید شده به صورت زیر خواهد بود.
[4, 3, 2, 1] [3.67, 3.28, 2.01, 2.0, 1.68] ['Geeks', 'Geeks', 'For']
پیاده سازی متد sort درحالی که پارامترهای reverse و key مقداردهی شده اند
و برای گزینه آخر در انواع سینتکسهای متد sort()
به پیادهسازی سینتکسی پرداختهایم که منظم کردن ترتیب لیستها را به انتخاب کاربر واگزار میکند.
1# function to return the second element of the
2# two elements passed as the paramater
3def sortSecond(val):
4 return val[1]
5
6# list1 to demonstrate the use of sorting
7# using using second key
8list1 = [(1,2),(3,3),(1,1)]
9
10# sorts the array in ascending according to
11# second element
12list1.sort(key=sortSecond)
13print(list1)
14
15# sorts the array in descending according to
16# second element
17list1.sort(key=sortSecond,reverse=True)
18print(list1)
19# Copy CodeRun on IDE
خروجی کد بالا به صورت زیر نمایش داده میشود.
[(1, 1), (1, 2), (3, 3)] [(3, 3), (1, 2), (1, 1)]
متد copy در لیست های پایتون
متد copy()
به برگرداندن کپی سطحی از یک لیست کمک میکند. البته توجه کنید که لیستها را با استفاده از عملگر =
هم میتوان کپی کرد. برای مثال به کد زیر نگاه کنید.
1old_list = [1, 2, 3]
2new_list = old_list
اما مشکل اصلی این نوع کپی کردن این است که اگر تغییری در new_list
اعمال کنید، این تغییر در old_list
نیز اعمال میشود. به کد نوشته شده در زیر توجه کنید.
1old_list = [1, 2, 3]
2new_list = old_list
3
4# add element to list
5new_list.append('a')
6
7print('New List:', new_list )
8print('Old List:', old_list )
وقتی که این کد را اجرا کنید خروجی تولید شده به شکل زیر خواهد بود.
Old List: [1, 2, 3, 'a'] New List: [1, 2, 3, 'a']
اتفاقی که دیدید به دلیل این است که عملگر =
مقادیر لیست را بهصورت واقعی در متغیر new_list
کپی نمیکند، بلکه در متغیر new_list
تنها چیزی که وجود دارد آدرس محلی است که عناصر لیست old_list
در حافظه قرار دارند.
به هرحال، اگر بخواهید که کپی واقعی از عناصر لیست خود تهیه کنید، طوری که درصورت ایجاد هر نوع تغییری در لیست جدید عناصر لیست اصلی بدون تغییر و دست نخورده باقی بمانند باید از متد copy()
استفاده کنید. به این نوع از کپی کردن کپی «کم عمق» (Shallow Copy) میگویند.
سینتکس پایه برای متد copy()
به صورت آمده در پایین میباشد.
پارامترهای متد copy()
به این شرح هستند که این متد هیچ پارامتری نمیپذیرد.
مقادیر برگشتی متد copy
متد copy()
فقط یک لیست را برمیگرداند. این لیست با تمام مشخصات لیست اصلی همسان است اما نام جداگانهای دارد. لیست اصلی بدون تغییر ثابت مانده است و هر تغییری که از این به بعد در هرکدام از لیستها اعمال شود به لیست دیگر هیچ تاثیری ندارد. این دو لیست از یکدیگر مستقل هستند.
برای نمایش نحوه کار متد copy()
مثالی را در ادامه کدنویسی کردهایم.
1# mixed list
2list = ['cat', 0, 6.7]
3
4# copying a list
5new_list = list.copy()
6
7# Adding element to the new list
8new_list.append('dog')
9
10# Printing new and old list
11print('Old List: ', list)
12print('New List: ', new_list)
زمانی که کد بالا اجرا شود، خروجی که بدست میآید به شکل زیر خواهد بود.
Old List: ['cat', 0, 6.7] New List: ['cat', 0, 6.7, 'dog']
میتوانید مشاهده کنید که بعد از اینکه لیست جدید تغییر داده شده لیست قبلی دست نخورده باقی مانده است.
متد clear در لیست های پایتون
از متد clear()
برای حذف کردن همه اعضای لیست استفاده میشود. سینتکس پایه این متد را در کد زیر پیادهسازی کردهایم.
وضعیت پارامترهای این متد نیز به این صورت است که هیچ پارامتری به عنوان ورودی نمیپذیرد. فقط نام لیستی که باید عملیات حذف اعضا بر روی آن انجام شود را باید قبل از نام متد بیاوریم بعد یک نقطه و سپس نام متد را نیز مینویسیم.
مقادیر برگشتی متد clear
تنها وظیفه متد این است که لیست داده شده را بهطور کامل خالی کند. این متد هیچ مقداری را برنمیگرداند. به عنوان مثال، کارکرد متد clear()
را بر روی یک لیست رندم در زیر پیادهسازی کردهایم.
1# Defining a list
2list = [{1, 2}, ('a'), ['1.1', '2.2']]
3
4# clearing the list
5list.clear()
6
7print('List:', list)
نتیجه حاصل از کد بالا بهصورت زیر نمایش داده میشود.
List: []
به این نکته توجه کنید که اگر از پایتون۳.۲ یا پایینتر استفاده میکنید، نمیتوانید که متد clear()
را بکار ببرید در عوض میتوانید که از عملگر del
استفاده کنید.
تابع max در لیست های پایتون
تابع max()
بین عناصر لیست جستوجو میکند و با ارزشترین مقدار لیست را نمایش میدهد. توجه کنید که برای مقایسه اعضا، یا همه اعضا باید عدد باشند یا همه اعضا باید از نوع رشته باشند.
پارامترهای ورودی این تابع به این شرح است که یک ورودی میگیرد و آنهم همان لیستی است که باید بین اعضای آن پیمایش و مقایسه انجام دهد. در ادامه شکل پایه این تابع را پیادهسازی کردهایم.
مقادیر برگشتی تابع max
تابع max()
مقداری را به عنوان خروجی برمیگرداند که همان مقدار بزرگترین عنصر لیست است. در کد زیر برای نمونه از تابع max()
بر روی لیست فرضی قیمتها استفاده کردهایم تا بیشترین قیمت را پیدا کنیم.
1prices = [589.36, 237.81, 230.87, 463.98, 453.42]
2price_max = max(prices)
3print(price_max)
خروجی کد بالا بهصورت زیر خواهد بود.
589.36
تابع min در لیست های پایتون
تابع min()
بر عکس تابع max()
عمل میکند. از این تابع برای پیدا کردن کوچکترین عنصر در هر لیستی استفاده میشود. فقط همانند تابع max()
دو شرط اصلی دارد.
- اعضای لیست از نوع دادههای اصلی باشند.
- همه اعضای لیست از یک نوع باشند. برای مثال نوع داده عددی با نوع داده رشتهای قابل قیاس نیست.
پارامترهای ورودی این تابع به این شرح است که یک ورودی میگیرد و آنهم همان لیستی است که باید بین اعضای آن پیمایش و مقایسه انجام دهد. شکل پایه تابع min()
را در پایین کدنویسی کردهایم.
مقادیر برگشتی تابع min
تابع min()
به عنوان مقدار برگشتی، کوچکترین عنصر لیستی را که بر روی آن اجرا شده است را برمیگرداند.
به عنوان مثال در ادامه میخواهیم ماهی از سال را که کمترین میزان فروش در آن انجام گرفته است را پیدا کنیم. برای شروع دو لیست فرضی داریم – لیست مربوط به ماهها و لیست مربوط به قیمت- که با یکدیگر متقارن هستند یعنی عناصر موجود در هر ایندکس به یکدیگر مرتبط هستند. در ابتدا به کمک تابع min()
در لیست مربوط به قیمتها کمترین قیمت را پیدا میکنیم. سپس با کمک تابع index ()
در لیست مربوط به قیمتها به دنبال ایندکس مربوط به کمترین قیمت میگردیم و در نهایت به کمک ایندکس پیدا شده در لیست مربوط به ماهها، ماهی که کمترین میزان هزینه در آن انجام گرفته است را پیدا میکنیم.
1months = ['January', 'February', 'March']
2prices = [238.11, 237.81, 238.91]
3# Identify min price
4min_price = min(prices)
5 # Identify min price index
6min_index = prices.index(min_price)
7 # Identify the month with min price
8min_month = months[min_index]
9print(min_month)
تابع len در لیست های پایتون
آخرین گزینهای که در این مطلب درباره متدهای لیست در پایتون بررسی خواهیم کرد تابع len()
است، این تابع تعداد عناصر موجود در لیست را برمیگرداند. پارامترهای این تابع به این شرح است که یک آرگومان ورودی دارد و آن آرگومان نام همان لیستی است که باید بر روی آن پیمایش انجام دهد.
شکل سینکس پایه تابع len()
به صورت زیر است.
البته گرفتن خروجی با عبارت result =
اجباری نیست.
مقادیر برگشتی تابع len
این تابع یک مقدار برگشتی دارد و آن هم تعداد عناصر موجود در لیستی است که به عنوان پارامتر به این تابع ارسال شده.
در مثال پیادهسازی شده در پایین به کمک تابع len()
تعداد عنصرهای موجود در دو لیست متفاوت را پیدا کردهایم.
1list_1 = [50.29]
2list_2 = [76.14, 89.64, 167.28]
3print('list_1 length is ', len(list_1))
4print('list_2 length is ', len(list_2))
خروجی کد بالا بهصورت زیر میشود.
list_1 length is 1 list_2 length is 3
در بخش بعدی به بیان تفاوت بین توابع و متدهای لیست در پایتون پرداختهایم.
تفاوت بین توابع لیست و متدهای لیست در پایتون
در پایتون، تابع میتواند پارامترهای ورودی بگیرد و ممکن است نتیجهای را به عنوان خروجی تابع برگرداند یا حتی هیچ خروجی برنگرداند. اما از طرف دیگر، متد میتواند به عنوان نمونهای از شیئی ارسال شده باشد. ممکن است خروجی مورد انتظاری را نتیجه بدهد یا ندهد. تفاوت کلیدی بین تابع و لیست این است که توابع میتوانند اشیا را به عنوان ورودی بگیرند ولی متدها در عوض روی اشیا عملیات انجام میدهند. در واقع متدها برای اینکه بتوانند با اشیا کار کنند از قبل برای آن اشیا تعریف شدهاند. در نتیجه در زبان برنامهنویسی پایتون درحالی که همه متدها تابع هستند، همه تابعها متد نیستند.
ایجاد لیست در پایتون با استفاده از تابع list
قبل از اینکه متدهای لیست در پایتون را بررسی کنیم باید با تابع list()
آشنا شویم و در ابتدا نحوه ایجاد لیستها را بیاموزیم.
تابع list()
برای ساخت لیستها در پایتون استفاده میشود. این تابع، ساختار دادهای پیمایشپذیر را به عنوان پارامتر دریافت میکند و لیستی را به عنوان خروجی برمیگرداند. این داده پیمایشپذیر میتواند «تاپل» (tuple)، «دیکشنری» (dictionary)، «رشته» (string) و حتی لیست دیگری نیز باشد. برای آزمودن این مطلب، کد زیر را آوردهایم.
1# sample iterables
2sample_tuple = (1,2,3,4)
3sample_dict = {'a': 1, 'b': 2, 'c': 3}
4sample_string = 'hello'
5
6# converting to list
7print('tuple to list', list(sample_tuple))
8print('dict to list', list(sample_dict))
9print('string to list', list(sample_string))
خروجی کد بالا به صورت زیر میشود.
[1, 2, 3, 4] ['a', 'b', 'c'] ['h', 'e', 'l', 'l', 'o']
جمع بندی
در این مطلب از مجله فرادرس، با انواع مختلفی از متدها و توابع مربوط به لیست در پایتون آشنا شدیم. اصول پایهای مربوط به مهمترین توابع و متدهای پایتون را پوشش دادیم و سعی کردیم تا حد امکان به پیادهسازی کدهای مربوط به آنها بپردازیم. متدها و توانایی استفاده از آنها وقتی به کار میآیند که به عنوان «تحلیلگر داده» (Data Analyst)، درحال انجام تجزیه و تحلیلی رو پایگاهداده باشید یا اینکه به عنوان «دانشمند داده» (Data Scientist) درحال ساخت مدلهای «یادگیری ماشین» (Machine Learning) باشید.
اگر بخواهیم از چیزهایی که در این مطلب دربارهشان صحبت کردهایم خلاصهای ارائه کنیم، به نکات زیر میتوان اشاره کرد.
- به مجموعهای منظم و قابل تغییر که میتواند محتوای متنوعی از اشیا را شامل شود، در پایتون لیست میگویند، به وسیله براکت [ ]
نمایشداده میشود و هر عنصر با عنصر مجاور به وسیله کاما از هم جدا میشوند.
- توابع مربوط به لیست در پایتون اشیا را هم به عنوان پارامتر ورودی میتوانند بپذیرند اما متدها در مقابل بر روی اشیا کار میکنند.
- از متدهای لیست در پایتون میتوان به append()
، remove()
، index()
و غیره اشاره کرد و برای توابع مربوط به لیست در پایتون میتوان از max()
، min()
، len()
و غیره نام برد.
سوالات متداول
در این بخش به سوالاتی میپردازیم که بیشترین تکرار را بین کاربران داشته اند و ممکن است برای شما هم پیش بیاید.
تفاوت بین لیست و تاپل چیست؟
هر دو گزینه لیست و تاپل از ساختارهای پیمایشپذیر در پایتون هستند. اما لیستها قابل تغییراند و تاپلها قابل تغییر نیستند.
چه گزینه هایی به عنوان متدهای لیست در پایتون وجود دارند؟
لیستها در پایتون از انواع مختلفی از متدها پشتیبانی میکنند. برای مثال میتوان به ()append() ، insert() ، remove() ، index و غیره اشاره کرد.
مهمترین توابع در پایتون چه هستند؟
میتوان از ()max و ()min و ()len به عنوان چند تابع از توابع مهم در پایتون نام برد که در ارتباط با لیستها نیز به خوبی کار میکنند.
source