وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

مقدمه ای بر ماژول مجموعه های پایتون

0 6
زمان لازم برای مطالعه: 8 دقیقه


معرفی

مجموعه ها در پایتون محفظه هایی هستند که برای ذخیره مجموعه ای از داده ها استفاده می شوند، به عنوان مثال، لیست، دیکته، مجموعه، تاپل و غیره اینها مجموعه های داخلی هستند. چندین ماژول توسعه داده شده است که ساختارهای داده اضافی را برای ذخیره مجموعه داده ها فراهم می کند. یکی از این ماژول ها پایتون است ماژول مجموعه ها.

پایتون ماژول مجموعه ها برای بهبود عملکرد ظروف مجموعه داخلی معرفی شد. پایتون collections ماژول اولین بار در نسخه 2.4 خود معرفی شد. این آموزش مبتنی است روی آخرین نسخه پایدار آن (نسخه 3.7).

collections مدول

در این آموزش ما 6 مورد از متداول ترین ساختارهای داده استفاده شده از پایتون را مورد بحث قرار خواهیم داد collections مدول. آنها به شرح زیر است:

را Counter

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

تو باید import را Counter قبل از اینکه بتوانید یک کلاس ایجاد کنید counter نمونه، مثال.

from collections import Counter

اشیاء شمارنده ایجاد کنید

راه های متعددی برای ایجاد وجود دارد counter اشیاء. ساده ترین راه استفاده از Counter() عملکرد بدون هیچ آرگومان

cnt = Counter()

می توانید یک (فهرست) تکرار شونده را به آن ارسال کنید Counter() تابع ایجاد a counter هدف – شی.

list = (1,2,3,4,1,2,6,7,3,8,1)
Counter(list)

در نهایت، Counter() تابع می تواند یک دیکشنری را به عنوان آرگومان در نظر بگیرد. در این فرهنگ لغت، مقدار یک کلید باید تعداد آن کلید باشد.

Counter({1:3,2:4})

همانطور که در زیر نشان داده شده است، می توانید به هر مورد شمارنده با کلید آن دسترسی داشته باشید:

list = (1,2,3,4,1,2,6,7,3,8,1)
cnt = Counter(list)
print(cnt(1))

وقتی تو print cnt(1)، تعداد 1 را دریافت خواهید کرد.

خروجی:

3

در مثال های بالا، cnt یک شی از Counter کلاس که زیر مجموعه ای از dict. بنابراین تمام روش های آن را دارد dict کلاس

جدا از آن، Counter دارای سه عملکرد اضافی:

  1. عناصر
  2. Most_common((n))
  3. تفریق ((قابلیت تعامل یا نگاشت))

تابع عنصر()

شما می توانید آیتم های a Counter شی با elements() تابع. لیستی حاوی تمام عناصر موجود در آن را برمی گرداند Counter هدف – شی.

به مثال زیر نگاه کنید:

cnt = Counter({1:3,2:4})
print(list(cnt.elements()))

خروجی:

(1, 1, 1, 2, 2, 2, 2)

در اینجا، ما یک را ایجاد می کنیم Counter شیء با دیکشنری به عنوان آرگومان. در این شی Counter، تعداد 1 برابر 3 و تعداد 2 برابر با 4 است elements() تابع استفاده نامیده می شود cnt شی که یک تکرار کننده را برمی گرداند که به عنوان آرگومان به لیست ارسال می شود.

تکرار کننده 3 بار روی 1 تکرار می کند و سه عدد 1 را برمی گرداند و چهار بار روی 2 تکرار می کند و چهار عدد 2 را به لیست برمی گرداند. در نهایت، لیست با استفاده از print تابع.

تابع most_common()

را Counter() تابع یک فرهنگ لغت نامرتب را برمی گرداند. شما می توانید آن را بر اساس تعداد تعداد در هر عنصر با استفاده از most_common() عملکرد از Counter هدف – شی.

list = (1,2,3,4,1,2,6,7,3,8,1)
cnt = Counter(list)
print(cnt.most_common())

خروجی:

((1, 3), (2, 2), (3, 2), (4, 1), (6, 1), (7, 1), (8, 1))

می توانید ببینید که most_common تابع لیستی را برمی گرداند که بر اساس مرتب شده است روی تعداد عناصر 1 دارای سه عدد است، بنابراین اولین عنصر لیست است.

را subtract() تابع

را subtract() تکرارپذیر (فهرست) یا نگاشت (فرهنگ لغت) را به عنوان آرگومان می گیرد و تعداد عناصر را با استفاده از آن آرگومان کسر می کند. مثال زیر را بررسی کنید:

cnt = Counter({1:3,2:4})
deduct = {1:1, 2:2}
cnt.subtract(deduct)
print(cnt)

خروجی:

Counter({1: 2, 2: 2})

می توانید متوجه شوید که cnt شیئی که برای اولین بار ایجاد کردیم دارای تعداد 3 برای ‘1’ و تعداد 4 برای ‘2’ است. را deduct فرهنگ لغت دارای مقدار «1» برای کلید «1» و مقدار «2» برای کلید «2» است. را subtract() تابع 1 شمارش از کلید ‘1’ و 2 شمارش از کلید ‘2’ کسر می کند.

را defaultdict

را defaultdict دقیقا مانند a کار می کند python فرهنگ لغت، به جز آن را نمی اندازد KeyError وقتی سعی می کنید به یک کلید ناموجود دسترسی پیدا کنید.

در عوض، کلید را با عنصر نوع داده ای که به عنوان آرگومان در هنگام ایجاد آن ارسال می کنید، مقداردهی اولیه می کند defaultdict. نوع داده نامیده می شود default_factory.

وارد کردن defaultdict

اول، شما باید import defaultdict از جانب collections ماژول قبل از استفاده از آن:

from collections import defaultdict

ایجاد یک defaultdict

شما می توانید یک را ایجاد کنید defaultdict با defaultdict() سازنده شما باید یک نوع داده را به عنوان آرگومان مشخص کنید. کد زیر را بررسی کنید:

nums = defaultdict(int)
nums('one') = 1
nums('two') = 2
print(nums('three'))

خروجی:

0

در این مثال، int به عنوان تصویب می شود default_factory. توجه کنید که فقط پاس می کنید int، نه int(). در مرحله بعد، مقادیر برای دو کلید، یعنی: one و two، اما در خط بعدی سعی می کنیم به کلیدی دسترسی پیدا کنیم که هنوز تعریف نشده است.

پیشنهاد می‌کنیم بخوانید:  نمودارها در پایتون - تئوری و پیاده سازی

در یک فرهنگ لغت معمولی، این کار باعث می شود a KeyError. ولی defaultdict کلید جدید را با مقداردهی اولیه می کند default_factoryمقدار پیش فرض که 0 برای است int. بنابراین، هنگامی که برنامه اجرا می شود، 0 چاپ می شود. این ویژگی خاص اولیه سازی کلیدهای غیر موجود را می توان در موقعیت های مختلف مورد سوء استفاده قرار داد.

برای مثال، فرض کنید می‌خواهید تعداد هر نام را در فهرستی از نام‌ها به‌عنوان «مایک، جان، مایک، آنا، مایک، جان، جان، مایک، مایک، بریتنی، اسمیت، آنا، اسمیت» تعیین کنید.

from collections import defaultdict

count = defaultdict(int)
names_list = "Mike John Mike Anna Mike John John Mike Mike Britney Smith Anna Smith".split()
for names in names_list:
    count(names) +=1
print(count)

خروجی:

defaultdict(<class 'int'>, {'Mike': 5, 'Britney': 1, 'John': 3, 'Smith': 2, 'Anna': 2})

ابتدا یک را ایجاد می کنیم defaultdict با int مانند default_factory. را names_list شامل مجموعه ای از نام ها است که چندین بار تکرار می شود. را split() تابع لیستی را از رشته داده شده برمی گرداند. هر زمان که با یک فاصله سفید مواجه می شود رشته را می شکند و کلمات را به عنوان عناصر لیست برمی گرداند. در حلقه، هر مورد در لیست به آن اضافه می شود defaultdict به نام count و بر اساس 0 مقداردهی اولیه شد روی default_factory. اگر دوباره با همان عنصر مواجه شد، با ادامه حلقه، تعداد آن عنصر افزایش می یابد.

را OrderedDict

OrderedDict یک فرهنگ لغت است که در آن کلیدها ترتیب قرار دادن آنها را حفظ می کنند، به این معنی که اگر بعداً مقدار یک کلید را تغییر دهید، موقعیت کلید را تغییر نمی دهد.

وارد کردن OrderedDict

برای استفاده OrderedDict تو باید import آن را از collections مدول.

from collections import OrderedDict

ایجاد یک OrderedDict

می توانید یک شی OrderedDict با OrderedDict() سازنده در کد زیر یک را ایجاد می کنید OrderedDict بدون هیچ استدلالی پس از آن مواردی در آن درج می شود.

od = OrderedDict()
od('a') = 1
od('b') = 2
od('c') = 3
print(od)

خروجی:

OrderedDict((('a', 1), ('b', 2), ('c', 3)))

شما می توانید با استفاده از یک حلقه نیز به هر عنصر دسترسی داشته باشید. به کد زیر دقت کنید:

for key, value in od.items():
    print(key, value)

خروجی:

a 1
b 2
c 3

مثال زیر یک مورد استفاده جالب از OrderedDict با Counter. در اینجا، ما یک را ایجاد می کنیم Counter از یک لیست و درج عناصر به یک OrderedDict مستقر روی شمارش آنها

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

list = ("a","c","c","a","b","a","a","b","c")
cnt = Counter(list)
od = OrderedDict(cnt.most_common())
for key, value in od.items():
    print(key, value)

خروجی:

a 4
c 3
b 2

را deque

را deque لیستی است که برای درج و حذف موارد بهینه شده است.

وارد کنید deque

تو باید import را deque کلاس از collections ماژول قبل از استفاده از آن

from collections import deque

ایجاد یک deque

شما می توانید یک را ایجاد کنید deque با deque() سازنده شما باید یک لیست را به عنوان استدلال ارسال کنید.

list = ("a","b","c")
deq = deque(list)
print(deq)

خروجی:

deque(('a', 'b', 'c'))

درج عناصر به deque

شما به راحتی می توانید یک عنصر را به آن وارد کنید deq ما در هر یک از انتها ایجاد کردیم. برای اضافه کردن یک عنصر در سمت راست deq، باید از append() روش.

اگر می خواهید عنصری را به شروع آن اضافه کنید deq، باید از appendleft() روش.

deq.append("d")
deq.appendleft("e")
print(deq)deque

خروجی:

deque(('e', 'a', 'b', 'c', 'd'))

می توانید متوجه آن شوید d در پایان اضافه می شود deq و e به شروع اضافه می شود deq.

حذف عناصر از deque

حذف عناصر شبیه به درج عناصر است. شما می توانید یک عنصر را به روشی که عناصر را وارد می کنید حذف کنید. برای حذف یک عنصر از انتهای سمت راست، می توانید از pop() تابع و برای حذف یک عنصر از سمت چپ، می توانید استفاده کنید popleft().

deq.pop()
deq.popleft()
print(deq)

خروجی:

deque(('a', 'b', 'c'))

می توانید متوجه شوید که هر دو عنصر اول و آخر از قسمت حذف شده اند deq.

پاکسازی الف deque

اگر می خواهید همه عناصر را از a حذف کنید deque، می توانید استفاده کنید clear() تابع.

list = ("a","b","c")
deq = deque(list)
print(deq)
print(deq.clear())

خروجی:

deque(('a', 'b', 'c'))
None

می توانید در خروجی ببینید، در ابتدا یک صف با سه عنصر وجود دارد. هنگامی که ما اعمال می کنیم clear() تابع، deque پاک می شود و می بینید none در خروجی

پیشنهاد می‌کنیم بخوانید:  تابع zip() Python

شمارش عناصر در الف deque

اگر می خواهید تعداد یک عنصر خاص را پیدا کنید، از آن استفاده کنید count(x) تابع. شما باید عنصری را که باید تعداد آن را پیدا کنید، به عنوان آرگومان مشخص کنید.

list = ("a","b","c")
deq = deque(list)
print(deq.count("a"))

خروجی:

1

در مثال بالا، تعداد ‘a’ 1 است. بنابراین ‘1’ چاپ شده است.

را ChainMap

ChainMap برای ترکیب چندین فرهنگ لغت یا نگاشت استفاده می شود. فهرستی از دیکشنری ها را برمی گرداند.

وارد کردن chainmap

تو باید import ChainMap از collections ماژول قبل از استفاده از آن

from collections import ChainMap

ایجاد یک ChainMap

برای ایجاد یک نقشه زنجیره ای می توانیم از ChainMap() سازنده ما باید دیکشنری هایی را که قرار است ترکیب کنیم را به عنوان یک مجموعه آرگومان پاس کنیم.

dict1 = { 'a' : 1, 'b' : 2 }
dict2 = { 'c' : 3, 'b' : 4 }
chain_map = ChainMap(dict1, dict2)
print(chain_map.maps)

خروجی:

({'b': 2, 'a': 1}, {'c': 3, 'b': 4})

شما می توانید لیستی از فرهنگ لغت ها را به عنوان خروجی مشاهده کنید. می توانید با نام کلید به مقادیر نقشه زنجیره ای دسترسی پیدا کنید.

print(chain_map('a'))

خروجی:

1

‘1’ به عنوان مقدار کلید ‘a’ 1 چاپ می شود. نکته مهم دیگر این است که ChainMap هنگامی که فرهنگ لغت مرتبط با آن به روز می شود، مقادیر خود را به روز می کند. به عنوان مثال، اگر مقدار ‘c’ را در تغییر دهید dict2 به ‘5’، متوجه تغییر در خواهید شد ChainMap همچنین.

dict2('c') = 5
print(chain_map.maps)

خروجی:

({'a': 1, 'b': 2}, {'c': 5, 'b': 4})

دریافت کلیدها و مقادیر از ChainMap

می توانید به کلیدهای a دسترسی داشته باشید ChainMap با keys() تابع. به طور مشابه، شما می توانید به مقادیر عناصر با values() عملکرد، همانطور که در زیر نشان داده شده است:

dict1 = { 'a' : 1, 'b' : 2 }
dict2 = { 'c' : 3, 'b' : 4 }
chain_map = ChainMap(dict1, dict2)
print (list(chain_map.keys()))
print (list(chain_map.values()))

خروجی:

('b', 'a', 'c')
(2, 1, 3)

توجه داشته باشید که مقدار کلید ‘b’ در خروجی، مقدار کلید ‘b’ in است dict1. به عنوان یک قانون کلی، وقتی یک کلید در بیش از یک فرهنگ لغت مرتبط ظاهر می شود، ChainMap مقدار آن کلید را از اولین دیکشنری می گیرد.

افزودن دیکشنری جدید به ChainMap

اگر می خواهید یک فرهنگ لغت جدید را به یک فرهنگ لغت موجود اضافه کنید ChainMap، استفاده کنید new_child() تابع. جدید ایجاد می کند ChainMap با فرهنگ لغت تازه اضافه شده

dict3 = {'e' : 5, 'f' : 6}
new_chain_map = chain_map.new_child(dict3)
print(new_chain_map)

خروجی:

ChainMap({'f': 6, 'e': 5}, {'a': 1, 'b': 2}, {'b': 4, 'c': 3})

توجه داشته باشید که یک فرهنگ لغت جدید به ابتدای آن اضافه شده است ChainMap فهرست

را namedtuple()

را namedtuple() یک تاپل با نام برای هر موقعیت در تاپل برمی‌گرداند. یکی از بزرگترین مشکلات تاپل های معمولی این است که باید شاخص هر فیلد یک شی تاپل را به خاطر بسپارید. این بدیهی است دشوار است. را namedtuple برای حل این مشکل معرفی شد.

وارد کردن namedtuple

قبل از استفاده namedtuple، تو باید import آن را از collections مدول.

from collections import namedtuple

ایجاد یک namedtuple

from collections import namedtuple

Student = namedtuple('Student', 'fname, lname, age')
s1 = Student('John', 'Clarke', '13')
print(s1.fname)

خروجی:

Student(fname='John', lname='Clarke', age='13')

در این مثال، الف namedtuple هدف – شی Student اعلام شده است. شما می توانید به فیلدهای هر نمونه ای از a دسترسی داشته باشید Student کلاس با نام فیلد تعریف شده

ایجاد یک namedtuple با استفاده از یک لیست

را namedtuple() تابع نیاز دارد که هر مقدار به طور جداگانه به آن ارسال شود. در عوض، می توانید استفاده کنید _make() برای ایجاد یک namedtuple به عنوان مثال با یک لیست کد زیر را بررسی کنید:

s2 = Student._make(('Adam','joe','18'))
print(s2)

خروجی:

Student(fname='Adam', lname='joe', age='18')

یک نمونه جدید با استفاده از نمونه موجود ایجاد کنید

را _asdict() تابع می تواند برای ایجاد یک OrderedDict نمونه از یک نمونه موجود

s2 = s1._asdict()
print(s2)

خروجی:

OrderedDict((('fname', 'John'), ('lname', 'Clarke'), ('age', '13')))

تغییر مقادیر فیلد با _replace() تابع

برای تغییر مقدار یک فیلد از یک نمونه، _replace() تابع استفاده می شود. به یاد بیاور، _replace() تابع یک نمونه جدید ایجاد می کند. ارزش نمونه موجود را تغییر نمی دهد.

s2 = s1._replace(age='14')
print(s1)
print(s2)

خروجی:

Student(fname='John', lname='Clarke', age='13')
Student(fname='John', lname='Clarke', age='14')

نتیجه

با آن، ما آموزش خود را به پایان می رسانیم روی ماژول مجموعه ها ما در مورد تمام موضوعات مهم بحث کرده ایم collection مدول. پایتون collection اگر ما آن را با کتابخانه مجموعه جاوا مقایسه کنیم، ماژول هنوز نیاز به بهبود دارد. بنابراین می توان انتظار تغییرات زیادی را در نسخه های آینده داشت.

منابع

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-25 10:44:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

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