درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
تخفیف های وب سایت
همه تخفیف ها

عضویت در

کانال تلگرام

توسینسو

اطلاعات مطلب
مدرس/نویسنده
حسین احمدی
امتیاز: 216285
رتبه:3
344
265
418
2848
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر

آموزش زبان پایتون :: قسمت چهاردهم - مجموعه ها (Sets)

تاریخ 27 ماه قبل
نظرات 1
بازدیدها 1817
اگر بخواهیم یک تعریف کلی از مجموعه ها داشته باشیم می توانیم بگوییم که مجموعه ها همان دیکشنری ها هستند، فقط مقدار ندارند! یعنی شما فقط کلید تعیین می کنید برای مجموعه، مجموعه ای از مقادیر که امکان درج مقدار تکراری در آن وجود ندارد، مانند کلید ها در دیکشنری که امکان استفاده از دو کلید یکسان در دیکشنری وجود نداشت. اما چه تعریفی می توان از مجموعه ها داشت؟ برای تعریف مجموعه ها به سراغ درس ریاضی و مجموعه ها می رویم، صد در صد همه شما در درس ریاضی با نظریه مجموعه ها آشنا شدید. بر اساس تعریف ریاضی یک مجموعه دسته ای از اشیاء مختلف متمایز از هم است. برای مثال، مجموعه اعداد 1 تا 10 که به صورت زیر نمایش داده می شود:

A = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

در زبان پایتون به دو روش می توان مجموعه ایجاد کرد، یک روش شبیه به عبارتی است که در بالا مشاهده می کنید و یک روش دیگر استفاده از تابع set می باشد. ابتدا با یک مثال با نحوه ایجاد یک مجموعه خالی آشنا می شویم:

>>> new_set=set()
>>> new_set
set([])

و در کد زیر یک روش دیگر ایجاد مجموعه ها را مشاهده می کنید، در کد زیر دو مجموعه متفاوت که شامل اعداد فرد و اعداد زوج یک تا 10 هستند را تعریف می کنیم:

>>> even_nums={0,2,4,6,8}
>>> odd_nums={1,3,5,7,9}
>>> even_nums
set([8, 0, 2, 4, 6])
>>> odd_nums
set([9, 3, 1, 5, 7])

شاید فکر کنید که همانند لیست که با [] می توان یک لیست خام ایجاد کرد، برای مجموعه ها نیز همینطور است و با {} می توان یک مجموعه تهی ایجاد کرد، اما این موضوع صحیح نیست و {} یک دیکشنری خالی ایجاد می کند.

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

>>> numbers={1,2,2,3,4,5,4,6,7}
>>> numbers
set([1, 2, 3, 4, 5, 6, 7])

در زبان پایتون می توان از سایر نوع هایی که حالت لیست دارند یک مجموعه ایجاد کرد، کافیست مقدار مورد نظر از طریق پارامتر به تابع set ارسال شود:

>>> numbers=set((1,2,3,4,2,6,7))
>>> numbers
set([1, 2, 3, 4, 6, 7])
>>> chars=set('Hossein Ahmadi')
>>> chars
set(['A', ' ', 'e', 'd', 'i', 'H', 'm', 'o', 'n', 's', 'a', 'h'])
>>> names=set({'A':'Hossein Ahmadi','B':'Mohammad Nasiri'})
>>> names
set(['A', 'B'])

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

در مجموعه ها نیز مانند لیست ها، Tuple ها و دیکشنری ها برای چک کردن وجود یک آیتم از عبارت in استفاده می شود:

>>> numbers=set((1,2,3,4,2,6,7))
>>> 1 in numbers
True
>>> 9 in numbers
False

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

>>> sets={
... 'A':{1,2,3,4,5},
... 'B':{6,7,8,9,0}
... }
>>> sets['A']
set([1, 2, 3, 4, 5])

اگر از قسمت هشتم سری آموزشی به خاطر داشته باشید به بررسی حلقه ها پرداختیم، در نمونه کد زیر یک لیست از دانشجویان به تفکیک رتبه ایجاد می کنیم و بعد بوسیله حلقه for و if بررسی می کنیم که دانشجویی با نام Hossein در کدام رتبه قرار دارد. اما قبل از نوشتن کد مورد نظر، استفاده از حلقه های for در دیکشنری ها خاصیتی دارد که می توان دو پارامتر به تفکی برای کلید و مقدار در حلقه مشخص کرد:

>>> for key,value in sets.items():
...     print(key)
...     for item in value:
...         print(item)
...
A
1
2
3
4
5
B
0
9
6
8
7

در کد بالا، متغیر key اشاره به کلید داخل دیکشنری و متغیر value اشاره به مقدار معادل آن کلید دارد، به حلقه داخلی دقت کنید، بوسیله حلقه داخلی هر یک از آیتم های داخل مقدار کلید جاری پیمایش شده و در خروجی چاپ می شود. با توجه به مطلب گفته شده، برنامه رتبه دانشجویان را به صورت زیر و در یک فایل py می نویسیم:

students={
    'A':{'Hossein Ahmadi','Mohammad Nasiri'},
    'B':{'Jaffar Shohani','Mehdi Adeli'},
    'C':{'Ali Moghaddam','Hossein Ahmadi'}
}

for key, value in students.items():
    if 'Hossein Ahmadi' in value:
        print('Hossein Ahmadi grade:' + key)

در ادامه اسکریپت بالا را اجرا کرده و خروجی زیر را دریافت می کنیم:

D:\>py students.py
Hossein Ahmadi grade:A
Hossein Ahmadi grade:C

یکی از عملگرهایی که در مجموعه ها قابل استفاده است، عملگر & می باشد. این عملگر بین دو مجموعه قرار گرفته و خروجی آن یک مجموعه جدید است که حاوی اشتراک دو مجموعه می باشد، یعنی آیتم هایی که در هر دو مجموعه وجود دارند:

>>> {1,2,3,4} & {2,4,7,9}
set([2, 4])

علاوه بر عملگر & می توانید از تابع intersection هم استفاده کنید:

>>> {1,2,3,4}.intersection({2,4,7,9})
set([2, 4])

برای بدست آوردن اجتماع دو مجموعه از عملگر | یا تابع union استفاده می شود که هر دو اجتماع دو مجموعه را بر میگردانند:

>>> {1,2,3,4}.union({2,4,7,9})
set([1, 2, 3, 4, 7, 9])
>>> {1,2,3,4} | {2,4,7,9}
set([1, 2, 3, 4, 7, 9])

بوسیله عملگر - یا تابع difference می توان اختلاف دو مجموعه را بدست آورد، دقت کنید که این تابع تنها آیتم های مجموعه اول که در مجموعه دوم نیستند را بر میگرداند:

>>> {1,2,3,4} - {2,4,7,9}
set([1, 3])
>>> {1,2,3,4}.difference({2,4,7,9})
set([1, 3])

در صورتی که بخواهیم به صورت کامل اختلاف دو مجموعه را داشته باشیم، یعنی هم آیتم های مجموعه اول که در مجموعه دوم نیستند و هم آیتم های مجموعه دوم که در مجموعه اول نیستند از ^ یا تابع symmetric__difference استفاده می کنیم:

>>> {1,2,3,4} ^ {2,4,7,9}
set([1, 3, 7, 9])
>>> {1,2,3,4}.symmetric_difference({2,4,7,9})
set([1, 3, 7, 9])

برای اینکه چک کنیم مجموعه اول زیر مجموعه مجموعه دوم هست یا نه، از عملگر => یا تابع issubset استفاده می کنیم:

>>> {1,2,3,4,5} <= {1,2}
False
>>> {1,2,3,4,5}.issubset({1,2})
False

برعکس ای موضوع با عملگر <= یا تابع issuperset انجام می شود، یعنی مجموعه دوم زیر مجموعه اول هست یا خیر:

>>> {1,2,3,4,5} >= {1,2}
True
>>> {1,2,3,4,5}.issuperset({1,2})
True

در سه قسمتی که پشت سر گذاشتیم با لیست ها، Tuple ها، دیکشنری ها و مجموعه ها آشنا شدیم. در زبان پایتون امکان ترکیب نوع های داده پیش فرض با ساختار داده هایی که آموختیم وجود دارد تا بتوانیم نوع های پیچیده تر ایجاد کنیم. حال که با ساختار داده ها در پایتون آشنا شدیم، در قسمت بعد با تابع zip که برای پیمایش چندین لیست در یک حلقه for استفاده می شود آشنا می شویم.. ITpro باشید

نویسنده: حسین احمدی
منبع: جزیره برنامه نویسی وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است
برچسب ها
ردیف عنوان
1 آموزش زبان پایتون :: قسمت اول - مقدمات و آشنایی اولیه با پایتون
2 آموزش زبان پایتون :: قسمت دوم - دانلود پایتون و نوشتن اولین برنامه
3 آموزش زبان پایتون :: قسمت سوم - آشنایی با ساختار اسکریپت های پایتون
4 آموزش زبان پایتون :: قسمت چهارم - نوع های داده در زبان پایتون
5 آموزش زبان پایتون :: قسمت پنجم - تبدیل نوع ها به یکدیگر
6 آموزش زبان پایتون :: قسمت ششم - عملگرها در پایتون
7 آموزش زبان پایتون :: قسمت هفتم - دستور if
8 آموزش زبان پایتون :: قسمت هشتم - حلقه ها
9 آموزش زبان پایتون :: قسمت نهم - نوع های عددی و توابع کار با اعداد
10 آموزش زبان پایتون :: قسمت دهم - کار با رشته ها و توابع مرتبط
11 آموزش زبان پایتون :: قسمت یازدهم - لیست ها
12 آموزش زبان پایتون :: قسمت دوازدهم - Tuple ها
13 آموزش زبان پایتون :: قسمت سیزدهم - دیکشنری ها (Dictionaries)
14 آموزش زبان پایتون :: قسمت چهاردهم - مجموعه ها (Sets)
15 آموزش زبان پایتون :: قسمت پانزدهم - تابع zip و پیمایش چند لیست به صورت همزمان
16 آموزش زبان پایتون :: قسمت پانزدهم - روش Comprehension برای ایجاد لیست ها، دیکشنری ها و مجموعه ها
17 آموزش زبان پایتون :: قسمت شانزدهم - توابع (Functions)
18 آموزش زبان پایتون :: قسمت هفدهم - Closure ها
19 آموزش زبان پایتون :: قسمت هجدهم - توابع بازگشتی (Recursive Functions)
20 آموزش زبان پایتون :: قسمت نوزدهم - ماژول ها (Modules)
21 آموزش زبان پایتون :: قسمت بیستم - پکیج ها (Packages)
22 برنامه نویسی شئ گرا در پایتون :: مقدمات و آشنایی با کلاس و شئ
دوره مجموعه کل دوره
مطالب مرتبط

در حال دریافت اطلاعات

نظرات
  • عالی ایول مرسی از اینکه اموزش های متنی هم میزارید خوبیش اینه که رایگانه ایول مرسی

برای ارسال نظر ابتدا به سایت وارد شوید