نحوه استفاده از شمارنده پایتون

بهناز کی خواه
16 آبان 1401
دقیقه زمان برای مطالعه


7 نوامبر 2022

ما به‌عنوان توسعه‌دهندگان پایتون، ممکن است نیاز به ایجاد یک قطعه کد داشته باشیم که چندین شیء تکراری را در آن واحد شمارش کند. روش های مختلفی برای انجام این کار وجود دارد. با این حال، پایتون Counter کلاس از collections ماژول کارآمدترین و ساده‌ترین راه‌حل را برای شمارش آیتم‌های فردی در یک شیء تکرارپذیر ارائه می‌کند.

در این آموزش با Counter کلاس و اصول استفاده از آن در پایتون.
پس از اتمام این آموزش، درک خوبی از آن خواهید داشت

  • چه Counter کلاس است.
  • نحوه ایجاد یک Counter هدف – شی.
  • چگونه یک موجود را به روز کنیم Counter هدف – شی.
  • نحوه تعیین پرتکرارترین مورد در یک شیء تکرارپذیر.
  • نحوه ترکیب یا تفریق Counter اشیاء.
  • نحوه اجرای اتحاد و تقاطع روی دو Counter اشیاء.

ما فرض می کنیم که شما اصول پایتون، از جمله ساختارهای داده و توابع اولیه را می دانید. اگر با اینها آشنا نیستید یا می خواهید مهارت پایتون خود را تقویت کنید، ممکن است مایل باشید ما را امتحان کنید مبانی پایتون برای تجزیه و تحلیل داده ها – Dataquest.

پایتون چیست Counter کلاس

پایتون Counter یک زیر کلاس از نوع داده دیکشنری برای شمارش اشیاء قابل درهم سازی با ایجاد یک فرهنگ لغت است که در آن عناصر تکرارپذیر به عنوان کلید و تعداد آنها به عنوان مقادیر ذخیره می شود.
به عبارت دیگر، Counterتابع سازنده ‘s یک شی تکرارپذیر می گیرد و یک فرهنگ لغت حاوی فرکانس هر آیتم در شیء تکرارپذیر را تا زمانی که اشیاء قابل هش هستند برمی گرداند.
خبر خوب این است که برخی از عملیات های حسابی برای آنها قابل اجرا هستند Counter اشیاء.

در بخش بعدی استفاده از آن را مورد بحث قرار خواهیم داد Counter برای تعیین فراوانی اشیاء قابل هش در لیست ها، رشته ها و سایر اشیاء تکرار شونده.

کار با Counter Object

همانطور که قبلا ذکر شد، Counter شی یک راه بی دردسر برای شمارش سریع اقلام در اشیاء تکرارپذیر فراهم می کند.
برای نشان دادن اینکه چگونه Counter شی کار می کند و نتیجه خود را نشان می دهد، اجازه دهید با وارد کردن آن شروع کنیم Counter کلاس از collections ماژول و سپس آن را به صورت زیر روی یک رشته اعمال کنید:

from collections import Counter
a_str = 'barbara'
counter_obj = Counter(a_str)
print(counter_obj)
    Counter({'a': 3, 'b': 2, 'r': 2})

همانطور که نشان داده شده است، کد بالا حروف کلمه را می شمارد.
بیایید خروجی را با افزودن خطوط زیر به کد قبلی جذاب تر کنیم.

for item in counter_obj.items():
    print("Item: ", item[0]," Frequency: ", item[1])
    Item:  b  Frequency:  2
    Item:  a  Frequency:  3
    Item:  r  Frequency:  2

را Counter کلاس متدهای مفیدی مانند update() و most_common([n]). را update() متد یک شی تکرارپذیر را می گیرد و آن را به شی شمارنده موجود اضافه می کند.
بیایید آن را امتحان کنیم:

counter_obj.update("wallace")
print(counter_obj)
    Counter({'a': 5, 'b': 2, 'r': 2, 'l': 2, 'w': 1, 'c': 1, 'e': 1})

را most_common([n]) متد لیست مرتب شده ای از تاپل ها را با عبارت برمی گرداند n رایج ترین
اقلام و تعداد آنها

print(counter_obj.most_common(1))
    [('a', 5)]

کد بالا پرتکرارترین آیتم را برمی گرداند a_str هدف – شی.

برای درک استفاده از Counter بهتر شیء کنید، بیایید پرتکرارترین مورد را در جمله زیر تعیین کنیم:

“ترس منجر به خشم می شود، خشم منجر به نفرت می شود، نفرت منجر به درگیری می شود، درگیری منجر به رنج می شود.”
در اینجا نحوه انجام این کار آمده است:

quote_1 = "Fear leads to anger; anger leads to hatred; hatred leads to conflict; conflict leads to suffering."
words_1 = quote_1.replace(';','').replace('.','').split()
word_counts = Counter(words_1)
the_most_frequent = word_counts.most_common(1)
print(the_most_frequent)
    [('leads', 4)]

در کد بالا، Counter شی یک فرهنگ لغت ایجاد می کند که موارد قابل هش را در دنباله ورودی به تعداد رخدادها نگاشت می کند، به شرح زیر:

{
 'Fear': 1,
 'leads': 4,
 'to': 4,
 'anger': 2,
 'hatred': 2,
 'conflict': 2,
 'suffering': 1
}

همانطور که در قسمت اول این آموزش ذکر شد، یکی از ویژگی های ارزشمند Counter اشیاء این است که می توان آنها را با استفاده از عملیات ریاضی ترکیب کرد. مثلا:

from pprint import pprint
quote_2 = "Fear, anger, and hatred essentially come from a lack of perspective as to what life is all about."
words_2 = quote_2.replace(',','').replace('.','').split()

dict_1 = Counter(words_1)
dict_2 = Counter(words_2)
pprint(dict_1)
print()
pprint(dict_2)
    Counter({'leads': 4,
             'to': 4,
             'anger': 2,
             'hatred': 2,
             'conflict': 2,
             'Fear': 1,
             'suffering': 1})

    Counter({'Fear': 1,
             'anger': 1,
             'and': 1,
             'hatred': 1,
             'essentially': 1,
             'come': 1,
             'from': 1,
             'a': 1,
             'lack': 1,
             'of': 1,
             'perspective': 1,
             'as': 1,
             'to': 1,
             'what': 1,
             'life': 1,
             'is': 1,
             'all': 1,
             'about': 1})

اکنون، می‌توانیم این دو نمونه شمارنده را ترکیب یا کم کنیم. بیایید آنها را امتحان کنیم:

pprint(dict_1 + dict_2)
    Counter({'to': 5,
             'leads': 4,
             'anger': 3,
             'hatred': 3,
             'Fear': 2,
             'conflict': 2,
             'suffering': 1,
             'and': 1,
             'essentially': 1,
             'come': 1,
             'from': 1,
             'a': 1,
             'lack': 1,
             'of': 1,
             'perspective': 1,
             'as': 1,
             'what': 1,
             'life': 1,
             'is': 1,
             'all': 1,
             'about': 1})
pprint(dict_1 - dict_2)
    Counter({'leads': 4,
             'to': 3,
             'conflict': 2,
             'anger': 1,
             'hatred': 1,
             'suffering': 1})

تا کنون، ما سعی کرده ایم Counter شی با مقادیر رشته به همین ترتیب، می‌توانیم اشیاء فهرست، تاپل یا دیکشنری را به آنها بدهیم Counter و تعداد اقلام آنها را بشمارید. بیایید آنها را در بخش های بعدی بررسی کنیم.

پایتونCounter با فهرست، تاپل، و اشیاء دیکشنری

برای بررسی نحوه داده شدن اشیاء فهرست، تاپل و دیکشنری به پایتون Counter به اشیاء قابل هش در قالب جفت های کلید-مقدار تبدیل می شود، بیایید بوتیکی را در نظر بگیریم که تی شرت هایی را در سه رنگ سبز، سفید و قرمز می فروشد.

اشیاء تکرار شونده زیر فروش تی شرت را در دو روز متوالی نشان می دهد به شرح زیر:

sales_day_1 = ['red','green','white','red','red','green', 'white','green','red','red','red', 'white', 'white']
sales_day_2 = ('red','red','green','white','green','white','red','red','green', 'white','green','red','green','red','red')
price = {'red':74.99, 'green':83.99, 'white':51.99}

sales_day_1_counter = Counter(sales_day_1)
sales_day_2_counter = Counter(sales_day_2)
price_counter = Counter(price)

total_sales = sales_day_1_counter + sales_day_2_counter
sales_increment = sales_day_2_counter - sales_day_1_counter
minimum_sales = sales_day_1_counter & sales_day_2_counter
maximum_sales = sales_day_1_counter | sales_day_2_counter

print("Total Sales:", total_sales)
print("Sales Increment over Two Days:", sales_increment)
print("Minimun Sales:", minimum_sales)
print("Maximum Sales:", maximum_sales)
    Total Sales: Counter({'red': 13, 'green': 8, 'white': 7})
    Sales Increment over Two Days: Counter({'green': 2, 'red': 1})
    Minimun Sales: Counter({'red': 6, 'green': 3, 'white': 3})
    Maximum Sales: Counter({'red': 7, 'green': 5, 'white': 4})

در مثال بالا، sales_increment شمارنده حاوی پیراهن های سفید نیست زیرا شی Counter مقادیر منفی را نشان نمی دهد. به همین دلیل است که کانتر فقط شامل پیراهن های سبز و قرمز است. تعداد پیراهن های سفید به -1 کاهش یافته و نادیده گرفته می شود.

ما استفاده کرده ایم & و | اپراتورها در کد بالا حداقل و حداکثر فروش هر رنگ تی شرت را برگردانند. بیایید در اینجا این دو عملگر را مورد بحث قرار دهیم. عملگر تقاطع (&) اشیاء را با حداقل تعداد از هر دو شمارنده برمی گرداند، در حالی که عملگر اتحادیه (|) حداکثر تعداد را از هر دو شمارنده برمی گرداند.
برای محاسبه کل فروش هر رنگ، می‌توانیم از قطعه زیر استفاده کنیم:

for color,quantity in total_sales.items():
    print(f"Total sales of '{color}' T-shirts: ${quantity*price_counter[color]:.2f}")
    Total sales of 'red' T-shirts: $974.87
    Total sales of 'green' T-shirts: $671.92
    Total sales of 'white' T-shirts: $363.93

برای بازیابی داده های اصلی استفاده شده برای ایجاد یک Counter، می توانیم استفاده کنیم elements() روش، به شرح زیر:

for item in sales_day_1_counter.elements():
    print(item)
    red
    red
    red
    red
    red
    red
    green
    green
    green
    white
    white
    white
    white

خروجی بالا نشان می‌دهد که عناصر شمارنده به همان ترتیبی که در آن بازگردانده شده‌اند sales_day_1_counter هدف – شی.

نتیجه گیری

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

امیدوارم امروز چیز جدیدی یاد گرفته باشید. با خیال راحت با من در ارتباط باشید لینکدین یا توییتر.

مهدی لطفی نژاد

درباره نویسنده

مهدی لطفی نژاد

مهدی مهندس ارشد داده و سرپرست تیم در ADA است. او یک مربی حرفه ای است که عاشق نوشتن آموزش های تجزیه و تحلیل داده است.





منبع

0 0 رای
امتیاز خود را ثبت کنید
guest
0 دیدگاه بیان شده
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • تصویر
  • SKU
  • نمره
  • قیمت
  • موجود
  • Availability
  • توضیح
  • عرض
  • اندازه
  • Attributes
  • Custom fields
مقایسه
preloader