مقایسه لیست ها در پایتون — راهنمای به زبان ساده
در زبان برنامهنویسی پایتون، لیست را میتوان به عنوان یکی از پرکاربردترین ساختارهای داده تلقی کرد. در پایتون از لیست برای ذخیره کردن چندین آیتم مختلف در یک متغیر استفاده میشود. در طی نوشتن کدهای پایتون، ممکن است نیاز باشد که مقادیر ذخیره شده در ساختار داده لیست مورد مقایسه قرار بگیرند. در مقاله حاضر سعی شده است تا حد امکان بهطور جامع به معرفی ساختار داده لیست پرداخته و انواع روشهای موجود برای مقایسه لیست ها در پایتون به همراه مثال شرح داده شوند.
لیست در پایتون چیست ؟
لیست به عنوان یکی از رایجترین و پرکاربردترین ساختار دادههای پایتون محسوب میشود که از آن میتوان برای ذخیره آیتمهای مختلف استفاده کرد. لیست در پایتون مشابه ساختار داده آرایه در سایر زبانهای برنامهنویسی است؛ با این حال، تفاوت اصلی لیست با آرایه در این است که لیستها برخلاف آرایهها میتوانند مقادیری با «نوع داده» (Data Type) مختلف را ذخیره کنند.
ویژگی های مهم لیست در پایتون چه هستند ؟
لیستهای پایتون از ویژگیهای مهمی برخوردارند. این ویژگیها عبارتاند از:
- لیستها قابل تغییر هستند. به عبارتی، بعد از تعریف لیست، میتوان آیتمهای آن را تغییر داد.
- لیستها آیتمهای خود را به ترتیب ذخیره میکنند. البته میتوان ترتیب آیتمهای درون لیست را تغییر داد.
- لیستها از اندیسگذاری برای دسترسی به آیتم خاصی استفاده میکنند.
- لیستها میتوانند مقادیر تکراری را در خود ذخیره کنند.
- میتوان در پایتون لیستهای تودرتو ایجاد کرد. به عبارتی، یکی از آیتمهای لیستها میتواند لیست دیگری باشد.
تعریف لیست در پایتون چگونه انجام میشود ؟
بهمنظور تعریف لیست در پایتون از علامت (براکت | [ ] ) استفاده میشود. هر یک از آیتمهای درون لیست نیز، با علاکت ویرگول انگلیسی (کاما) از یکدیگر جدا میشوند. در مثال زیر، سه نمونه از لیست با دادههای متفاوت ملاحظه میشود.
1list1 = ['physics', 'chemistry', 1997, 2000]
2list2 = [1, 2, 3, 4, 5 ]
3list3 = ["a", "b", "c", "d"]
در ادامه مطلب، به توضیح روشهای مختلف برای مقایسه دو لیست در پایتون پرداخته میشود.
روش های مقایسه لیست ها در پایتون کدامند ؟
مقایسه لیست در پایتون روشی است که با آن میتوان تعیین کرد آیا مقادیر موجود در لیستها با یکدیگر برابر هستند یا تفاوتهایی در آیتمهای لیستها وجود دارد. برای مقایسه دو لیست میتوان حالات پیچیدهتری را در نظر گرفت. هر یک از این حالتها در ادامه فهرست شدهاند:
- مقایسه دو لیست با مقادیر اعشاری با در نظر گرفتن «حد مجاز خطا» (Tolerance)
- مقایسه لیست ها در پایتون بدون در نظر داشتن ترتیب قرار گرفتن مقادیر در لیستها
- مقایسه لیست در پایتون و پیدا کردن مقادیر مشترک لیستها
- مقایسه دو لیست در پایتون و پیدا کردن مقادیر غیرمشترک لیستها
- مقایسه لیست ها در پایتون با مقادیر رشتهای بدون در نظر گرفتن حروف بزرگ و کوچک رشتهها
- مقایسه لیست در پایتون با مقادیر «دیکشنری» (Dictionary)
در ادامه مطلب، به توضیح روشهای مقایسه لیست ها در پایتون برای اعداد صحیح پرداخته شده است و محدودیت هر یک از روشهای مقایسه لیست شرح داده میشود. سپس، به توضیح روشهای مقایسه برای سایر انواع داده نظیر اعداد اعشاری، رشتهها، دیکشنری و لیستهای تودرتو نیز پرداخته ميشود.
استفاده از عملگر == برای مقایسه لیست ها در پایتون
یکی از سادهترین و رایجترین روش برای مقایسه لیست در پایتون، استفاده از عملگر==است. از این روش، در شرایط پیچیدهتر مقایسه استفاده نمیشود. در این روش مقایسه، آیتمهای درون دو لیست، یک به یک با یکدیگر مقایسه میشوند و چنانچه تمامی مقادیر با یکدیگر برابر بودند، خروجی این عملگر مقدار True خواهد بود؛ در غیر این صورت، در خروجی مقدار False بازگردانده میشود.
در مثال زیر، دو لیستnumbers وtarget با مقادیر عددی وجود دارند که با عملگر==مورد مقایسه قرار گرفتهاند. با این که محتوای هر دو لیست، یکسان هستند، با جابجایی دو آیتم در یکی از این لیستها، مقدار خروجی برابر با False میشود. بدین ترتیب، از این عملگر برای مقایسه دو لیست در پایتون بدون درنظر گرفتن ترتیب قرارگیری مقادیر در لیستها نمیتوان استفاده کرد.
1>>> numbers = [1, 2, 3]
2>>> target = [1, 2, 3]
3>>> numbers == target
4True
5>>> [1, 2, 3] == [1, 3, 2]
6False
استفاده از تابع Sort() و عملگر == برای مقایسه لیست در پایتون
در روش قبل ملاحظه شد هنگامی که دو لیست در پایتون دارای آیتمهای یکسانی هستند و تنها در ترتیب قرارگیری آیتمها با یکدیگر مغایرت دارند، عملگر==به تنهایی نمیتواند خروجی صحیحی برای مقایسه دو لیست در پایتون داشته باشد. یکی از راهحلهای پیشنهادی برای رفع این مشکل، استفاده از تابعsort است. با استفاده از این تابع، آیتمهای درون لیستها را میتوان مرتب کرد و سپس با استفاده از عملگر==مقایسه لیستها را انجام داد.
قطعه کد زیر، نمونهای از مقایسه دو لیست در پایتون را با استفاده از تابعsort و عملگر== نشان میدهد.
1l1 = [10, 20, 30, 40, 50]
2l2 = [10, 20, 30, 50, 40, 70]
3l3 = [50, 10, 30, 20, 40]
4
5l1.sort()
6l2.sort()
7l3.sort()
8
9if l1 == l3:
10 print ("The lists l1 and l3 are the same")
11else:
12 print ("The lists l1 and l3 are not the same")
13
14
15if l1 == l2:
16 print ("The lists l1 and l2 are the same")
17else:
18 print ("The lists l1 and l2 are not the same")
همانطور که در قطعه کد فوق ملاحظه میشود، لیستهایl1 ،l2 وl3 در ابتدا با استفاده از تابعsort مرتب و در ادامه با استفاده از عملگر== مقایسه شدهاند. خروجی قطعه کد بالا به صورت زیر است.
The lists l1 and l3 are the same The lists l1 and l2 are not the same
استفاده از تابع Set() و عملگر == برای مقایسه لیست ها در پایتون
استفاده از تابع «مجموعه» (Set) روش دیگری در زبان برنامهنویسی پایتون است که مشکل ترتیب آیتمهای درون لیست را برای مقایسه چندین لیست برطرف میکند. به عبارتی، در ساختار دادهset ترتیب قرارگیری آیتمهای درون مجموعه در نظر گرفته نمیشود و میتوان صرفاً مقادیر درون مجموعه را با یکدیگر مقایسه کرد.
در قطعه کد زیر، مثالی از مقایسه دو مجموعه در پایتون ملاحظه میشود.
1l1 = [10, 20, 30, 40, 50]
2l2 = [50, 10, 30, 20, 40]
3
4a = set(l1)
5b = set(l2)
6
7if a == b:
8 print("Lists l1 and l3 are equal")
9else:
10 print("Lists l1 and l3 are not equal")
بر اساس قطعه کد فوق، در ابتدا دو لیستl1 وl2 با استفاده از دستورset() به دو مجموعهa وb تبدیل شدهاند و سپس آیتمهای درون مجموعهها با استفاده از عملگر== مورد مقایسه قرار گرفتند. خروجی قطعه کد بالا در زیر ملاحظه میشود.
Lists l1 and l3 are equal
استفاده از کتابخانه deepdiff برای مقایسه لیست ها در پایتون چگونه است؟
کتابخانهdeepdiff روشی دیگری برای مقایسه لیست ها در پایتون محسوب میشود. برای استفاده از این کتابخانه، در ابتدا باید آن را برروی سیستم نصب کرد. این کتابخانه، دو لیست را به عنوان ورودی در زبان پایتون دریافت میکند و در خروجی، مقادیر متمایز را برمیگرداند. کتابخانهdeepdiffبه صورت پیشفرض ترتیب قرارگیری آیتمهای درون لیستها را مد نظر قرار میدهد؛ اما میتوان از پارامتر این کتابخانه با نامignore_order استفاده کرد تا در حین مقایسه دو لیست، ترتیب قرارگیری مقادیر نادیده گرفته شود.
قطعه کد زیر، مثالی از کاربرد کتابخانهdeepdiffرا برای مقایسه لیست در پایتون نشان میدهد.
1In [11]: numbers = [10, 30, 20]
2
3In [12]: target = [10, 20, 30]
4
5In [13]: DeepDiff(numbers, target)
6Out[13]:
7{'values_changed': {'root[1]': {'new_value': 20, 'old_value': 30},
8 'root[2]': {'new_value': 30, 'old_value': 20}}}
9
10In [14]: DeepDiff(numbers, target, ignore_order=True)
11Out[14]: {}
سلام وقت بخیر ممنون بابت توضیحات کامل و جامع عالی بود👏🏼 یه سوالی دارم: اگر بخوایم دو تا لیست که رشته ای هستند رو با هم مقایسه کنیم و مقادیر لیست کوچک تر رو از لیست بزرگتر حذف کنیم…چطوری میشه اینکا رو کرد؟