مقایسه بزرگی کوچیکی لیست پایتون

اشتراک‌گذاری

هیچ می‌دونستین که تو پایتون می‌تونین برای لیست ها و توپل ها عبارت هایی مثل [1,2,3]>[0,2,3] نوشت؟ یعنی می‌تونی خیلی راحت لیست ها رو باهم مقایسه کنی.

اخیرا در یکی از پروژه هایی که داشتم نیاز داشتم تا دو مقدار ورژن رو باهم مقایسه کنم تا مثلا اگر نسخه دوم از اولی جدید تر بود برنامه خودش رو آپدیت کنه، برای اینکار از یک امکان زبان پایتون یعنی مقایسه لیست ها در پایتون استفاده کردم. با من بهنام سیم‌جو همراه باش تا برات بگم ماجرا چیه!

من معمولا از شیوه Semantic Versioning (نسخه‌سازی معنایی😐) استفاده می‌کنم؛ به طور خلاصه این همون شیوه رایج نسخه سازی بین برنامه هاست. بنابراین یک سری عدد داریم که با نقطه از هم جدا شدن و به ترتیب از چپ به راست major.minor.patch هستن. مثلا می‌دونیم که نسخه ۲.۳.۴ از نسخه ۲.۳.۳ جدید تر هست، و همینطور ۳.۰.۰ جدید‌ترین اونها!

شاید با خودتون بگین که کاری نداره که! اگه نقطه ها رو حذف کنیم و به هم بچسبونیم، میشه یه عدد مثل ۲۳۴ که از ۲۳۳ بیشتره ولی اونوقت تو نسخه هایی مثل ۲۱.۳.۴ و ۲.۱۳.۴ چیکار کنیم؟!

پس هر کدوم از اعداد باید جدا جدا با رعایت ارجعیت مقایسه بشن. برای اینکار حدود ۶ خط کد (در ادامه نوشتم) لازم میشه ولی خب پایتون کار رو برامون ساده کرده! پایتون می‌تونه لیست و توپل رو هم مقایسه کنه!

اگر بخواهم کد پایتونی معادل این عملکرد را براتون بنویسم چنین چیزی خواهد بود:

def gtr (left, right):    # code for left_list>right_list
  for a,b in zip(left,right):
    if a==b:
      continue
    return a>b
  return len(left)>len(right)

فکر می‌کنم کد بالا گویای مطلب باشه! برای مقایسه‌ی لیست و توپل از اولین عضو شروع می‌کنیم، کاری که zip می‌کنه اینه که همزمان یه عضو از آرایه اول و یه عضو هم از آرایه دوم بهمون میده؛ همچنین هرکدوم از آرایه ها که تموم بشه zip حلقه رو خاتمه میده. توی حلقه میگیم که اگه هر دو برابر بودند، به مقایسه ادامه بده، در غیر این صورت حاصل مقایسه رو برگردونه، این یعنی اگر عضو لیست اول بزرگتر بود True و در غیر اینصورت False رو بر می‌گردونه.

حلقه با کوتاه ترین لیست تموم میشه، پس طول لیست ها رو هم مقایسه می‌کنیم که اگه لیست اولی بزرگ تر بود نتیجه True میشه.

پس برای مقایسه دو لیست اولین عضوی که بزرگ تر باشد جدای از طول لیست ها نتیجه را صحیح می‌کند، اگر اعضا برابر بودند سپس طول آن ها مقایسه می‌شود. با این حساب نتیجه مقایسه های زیر True هستند:

[1,2,3]   > [0,1,2,3,4]
[1,2,3,4] > [1,2,3]
[1,2,4]   > [1,2,3]
[1,0,0]   > [0,0,1]
اشتراک‌گذاری

6 دیدگاه برای “مقایسه بزرگی کوچیکی لیست پایتون”

  1. avatar

    اقا بلاگ جدید مبارک، کی مهاجرت کردین وردپرس ؟

    1. avatar

      چند ماهی میشه. اول روی thunix.net اما به علت ناپایداریش رفتیم روی xzn.ir
      میبینم که پیدامون کردی :))))

      1. avatar

        با خودم میگفتم این دوتا کرم روشون الکلی چیزی ریختن خشک شدن یا پیله کردن (:D) خبری از پستاشون نیست تا اینکه توی انجمن devheroes دیدم لینک دادی به اینجا :)) فهمیدم لونه عوض کردین :))

        اگر از سرویس هاست رایگان xzn.ir استفاده میکنید بزودی سایت ترافیک بگیره داون میشه. کلا هیچ سرویس هاست رایگانی خوب نیست. میرفتین سراغ Jekyll یا hugo یا دیگر استاتیک سایت جنریتورها هم فانه بلاگ نویسی با markdown هم میتونی رو گیت‌هاب هاست کنی تحمل بازدید زیاد هم داره.
        فقط بخش کامنت ندارن که میشه از issue های خود گیت هاب همون ریپوی بلاگ استفاده کرد از سرویس‌های جانبی مثل disqus و امثالهم.

        این https://farhadworkshop.ir/blog/hello-world/ نمونه سایت من با jekyll هست با فیل. شک.ن بریی بخش نظراتش هم برات لود میشه.

        1. avatar

          :))))
          نه از xzn.ir خریدیم.
          آره هوگو هم چیز جالبیه وب‌سایت شخصی من با hugo هست احتمالا بعدا با isso بهش بخش کامنت هم اضافه کنم

        2. avatar

          راستی توی گروه یک php کار کم داریم :))

          1. avatar

            کدوم گروه ؟ آقا نگید پی اچ پی کار :)) اصلا از این لفظ کار برای خطاب متخصصین استفاده نکنید پایتون کار، فلان کار :))

            تلگراممو داری ؟ ادم کن. (آی دی مو قبل تایید کامن توی ویرایش کامنت حذف کن:)‌ )