از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مقدمه ای بر ماژول مجموعه های پایتون
سرفصلهای مطلب
معرفی
مجموعه ها در پایتون محفظه هایی هستند که برای ذخیره مجموعه ای از داده ها استفاده می شوند، به عنوان مثال، لیست، دیکته، مجموعه، تاپل و غیره اینها مجموعه های داخلی هستند. چندین ماژول توسعه داده شده است که ساختارهای داده اضافی را برای ذخیره مجموعه داده ها فراهم می کند. یکی از این ماژول ها پایتون است ماژول مجموعه ها.
پایتون ماژول مجموعه ها برای بهبود عملکرد ظروف مجموعه داخلی معرفی شد. پایتون 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
دارای سه عملکرد اضافی:
- عناصر
- Most_common((n))
- تفریق ((قابلیت تعامل یا نگاشت))
تابع عنصر()
شما می توانید آیتم های 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
در خروجی
شمارش عناصر در الف 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