Professional Documents
Culture Documents
Pamphlet (Session02)
Pamphlet (Session02)
Pamphlet (Session02)
هرگونه کپی برداری غیرقانونی و حرام است و هیچ گونه رضایت مولف را در بر ندارد
فصل چهارم
لیست ()list
لیست دقیقاً همون چیزی است که در واقعیت ازش میشناسیم .مثالً لیستی از اعداد زوج کمتر از .10
]a=[2,4,6,8
نکته :لیست میتواند شامل انواع و اقسام چیزها ( Boolean ،float ،integer ،stringو )...باشد .به مثال زیر
توجه کنید.
]b=[1,2,"Sajjad",True,2+5j
نکته :برای تعریف لیست تهی به صورت زیر عمل میکنیم:
][=a
نکته :در لیست ترتیب مهم است و تکرار نیز پذیرفته میشود.
نکته :جمع کردن دو لیست ،یعنی کنار هم قرار دادن آنها:
]a=[1,2,3
]"b=["A","B","C
)print(a+b
که خروجی میشه:
]'[1, 2, 3, 'A', 'B', 'C
توجه کنید که اگر همینو بجای a+bبنویسیم ،b+a ،چون در listترتیب مهمه ،خروجی برعکس این مورد باال میشه و
اول لیست bنوشته خواهد شد و بعد لیست .a
نکته :اگر یک لیست رو در یک عدد ضرب کنیم ،به همون اندازه تکرارش میکنه.
مثال:
]a=[1,2,3
)print(a*2
خروجی میشه:
][1, 2, 3, 1, 2, 3
لیستهای تو در تو ()nested lists
یعنی شما می تونید داخل یک لیست ،مجدداً لیست تعریف کنید! و داخل اون لیست داخلی هم باز مجدداً میتونید
لیست تعریف کنید و الی آخر...
]]]"a=["Sajjad",84,[2+6j,[2,4,5,"Koolac
دسترسی به مولفههای یک لیست
فصل چهارم
دیکشنری
}a={"name":"Sajjad","age":10
این دیکشنری را به صورت زیر نیز میتوان نوشت [برای خوانایی بیشتر]:
{=a
"name":"Sajjad",
"age":10
}
درواقع پایتون به اون فاصلههایی که میذاریم حساس نیست!
چرا بهش میگین دیکشنری؟ چون شبیه dictionaryخودمون در دنیای واقعی است .یک لغت
وجود داره و متناظراً براش یک معنی وجود داره!
{=b
",پاککن" "eraser" :
""pen "خودکار" :
}
فقط اینجا (یعنی در پایتون) دیگه نمیگیم لغت و معنی .بلکه میگیم ( keyیا اندیس) و value
(مقدار)
توجه( key :یا اندیس) میتونه عدد string ،و tupleباشه و از طرفی ( valueیا مقدار) میتونه
عدد tuple ،string ،و listباشه.
{=c
1 : "Koolac",
""x : [1,2,3],
""y : (4,7,10),
)(1,2 : ""apple
}
دیکشنریهای تو در تو
{=a
{ "Sajjad Rahmani" : "Math":15, "English":10 },
""Milad Rangi { : "Math":20, "English":19 }
}
پس میبینیم که ( valueیا مقدار) دیکشنری هم میتونه باشه ،که در این صورت دیکشنریهای تو در
تو خواهیم داشت.
{=b
1 : "Koolac",
""x : [1,2,3],
""y : (4,7,10),
)(1,2 : ""apple
}
به ترتیب برای دسترسی به هر کدام از مولفهها داریم:
{=a
1 : "Koolac",
""x : [1,2,3],
""y : (4,7,10),
)(1,2 : ""apple
}
{=b
{ "Sajjad Rahmani" : "Math":15, "English":10 },
""Milad Rangi { : "Math":20, "English":19 }
}
بروزرسانی
[مربوط به دیکنشری ]aفرض کنید میخوایم مقدارِ متناظر با اندیس 1رو از " "Koolacبه
" "Koolac.Orgعوض کنیم ،در این صورت داریم:
"a[1]="Koolac.Org
[مربوط به دیکنشری ]bفرض کنید میخوایم نمره درس زبان سجّاد رحمانی رو از 10به 17عوض
کنیم ،در این صورت داریم:
b["Sajjad Rahmani"]["English"]=17
اضافه کردن مولفه
[مربوط به دیکنشری ]aفرض کنید میخوایم مولفهای با اندیس 2و با مقدار " "Sajjadاضافه کنیم،
در این صورت داریم:
"a[2]="Sajjad
[مربوط به دیکنشری ]bفرض کنید میخوایم نمرات دانشآموز دیگری با نام "محمّد امین احمدی" با
نمرات ریاضی 20:و زبان 20:رو اضافه کنیم ،در این صورت داریم:
متدهای دیکشنری
{=a
1 : "Koolac",
""x : [1,2,3],
""y : (4,7,10),
)(1,2 : ""apple
}
متد : keysاندیسهای یک دیکشنری را میدهد.
))(print(a.keys
خروجی:
))(print(a.values
خروجی:
متد : itemsمیاد در قالب لیستی شامل تاپلهایی به صورت (مقدار ,اندیس) همهی اندیسها و
مقادیر دیکشنری را خروجی میدهد:
))(print(a.items
خروجی:
)])'dict_items([(1, 'Koolac'), ('x', [1, 2, 3]), ('y', (4, 7, 10)), ((1, 2), 'apple
)(a.clear
)print(a
خروجی[ :یک دیکشنری تهی که به صورت زیر نمایش داده میشود]
}{
][1, 2, 3
)"a.pop("x
)print(a
خروجی:
set
})a={1,"Sajjad",3,(54,58
)print(a
))print(type(a
خروجی:
جواب :در اصل عالمت دیکشنری {} و اووون :است[ .البته بجز دیکشنری تهی که {} است]
-احتماالً میپرسید چرا توی خروجی ،ترتیب مولفهها رعایت نشده و دقیقاً به همون شکلی که وارد
کردیم در خروجی چاپ نشده؟
جواب set :هیچ اندیسی ندارد! (نه اندیسهایی که پایتون به صورت پیشفرض تعریف میکرد و مثالً
از صفر شروع میشد و نه اندیسهای خودساخته! [اگر یادتون باشه توی دیکشنری ،اندیسهای پایتونی
نداشتیم ،اما اندیسهای خودساخته داشتیم! ولی اینجا خبری از اندیسهای خودساخته هم نیست!]).
چون setهیچ اندیسی ندارد ،پس ترتیبی هم قائل نیست! و هر دفعه ترتیب رو به صورت تصادفی
میچینه! (یعنی ممکنه دفعه بعدی ،اون tupleرو بندازه آخر!)
نکته :در داخل یک setمیتوان عدد string ،و تاپل تعریف کرد.
سوال :آیا میتوان داخل ،setلیست قرار داد؟ خیر! دیکشنری چطور؟ بازهم خیر!
سوال :آیا میتوان داخل ،setیک setدیگه تعریف کرد و عمالً setتو در تو ساخت؟ بازهم خیر!
}a={1,2,2,2,3,3,3,4
)print(a
خروجی[ :همانطور که مشاهده میکنید ،تکراریها رو فقط یکبار چاپ میکند]
}{1, 2, 3, 4
)(a=set
نکته :تابع ،setورودی داده شده را به setتبدیل میکند [البته اگر ممکن باشه!].
مثال [تبدیل listبه :]set
]a=[1,2,3
)b=set(a
)print(b
خروجی:
}{1, 2, 3
)a=("Sajjad",2,3
)b=set(a
)print(b
خروجی:
}'{2, 3, 'Sajjad
}a={1,2,3,4,10
متد : addمیاد یک مولفه رو اضافه میکنه.
)"a.add("A
)print(a
خروجی:
)a.remove(10
)print(a
نکته :اگر به متد ،removeمولفهای که وجود نداره رو بدیم ،خطا میده.
)a.discard(10
)print(a
نکته :اگر به متد ،discardمولفهای که وجود نداره رو بدیم ،خطا نمیده و خیلی جدیمووون نمیگیره!
)(set
}a={1,2,3,4
}b={3,4,5,6
}c={1,2,3,4,5,6
}d={10,11
متد : isdisjointمیاد چک میکنه که آیا این حرف درسته که بگیم دو مجموعه کامالً از هم مجزا
هستن و هیچ عضو مشترکی باهم ندارن؟ (اگر این حرف درست باشه ،میگه ،Trueاگر این حرف
غلط باشه ،میگه )False؟
مثالً قبول دارید که مجموعه aو dکامالً از هم مجزا هستن و هیچ عضو مشترکی ندارن؟ [باید بگید
آره قبول دارم!] پس این که بگیم دو مجموعه aو dهیچ عضو مشترکی ندارن ،حرف درستی است
(پس باید Trueبده):
))print(a.isdisjoint(d
خروجی:
True
ولی قبول دارید که مجموعه aو cباهم عضو مشترک دارن؟ [بله! مثالً 1و2و3و 4بین این دو مجموعه
یکسانه!] پس این حرف که بگیم :دومجموعه aو cاز هم کامالً مجزا هستن و هیچ عضو مشترکی باهم
ندارن غلطه! (یعنی )False
))print(a.isdisjoint(c
خروجی:
False
متد : issubsetچک میکنه که آیا یک مجموعه ،زیر مجموعه دیگری هست یا نه؟
یادآوری از ریاضیات [زیرمجموعه] :مجموعه aزیرمجموعه bاست ،اگر همهی اعضای aدر b
باشد[ .در زبان انگلیسی به زیرمجموعه میگن ]subset
فرض کنید میخوایم چک کنیم که آیا مجموعه aزیرمجموعهی مجموعۀ cهست یا نه؟ [میدونیم که
جواب بله است]
True
متد :issupersetچک میکنه که آیا یک مجموعه ،مجموعه باالدستی دیگری هست یا نه؟
یادآوری از ریاضیات [مجموعه باالدستی] :مجموعه aباالدستی bاست ،اگر همهی اعضای bرا در
خودش داشته باشد[ .در زبان انگلیسی به مجموعه باالدستی میگن ]superset
فرض کنید میخوایم ببینیم آیا aمجموعه باالدستی cهست یا خیر؟ [میدونیم که جواب خیر است]
False
به عنوان مثال میدونیم اجتماع aو bمیشه } .{1,2,3,4,5,6حاال میخوایم ببینیم آیا پایتون هم
همینو میفهمه یا نه؟
}{1, 2, 3, 4, 5, 6
به عنوان مثال میدونیم اشتراک aو bمیشه } .{3,4حاال میخوایم ببینیم آیا پایتون هم همینو میفهمه
یا نه؟
}{3, 4
متد :symmetric_differenceمیاد تفاضل متقارن مجموعهها رو حساب میکنه.
یادآوری از ریاضیات [تفاضل متقارن] :تفاضل متقارن دو مجموعه ،مجموعهای از اعضای آنهاست
به گونهای که آن اعضا در یکی از دو مجموعه هست و در اشتراک آن دو وجود ندارد( .به زبووون
خودمونی :منحصر به فردهای هر مجموعه رو جدا میکنه! نه اونایی که توی دوتاشووون هست!)
به عنوان مثال میدونیم تفاضل متقارن aو bمیشه } .{1,2,5,6حاال میخوایم ببینیم آیا پایتون هم
همینو میفهمه یا نه؟
}{1, 2, 5, 6
رشتهها strings
قبالً هم میدونستیم که نوع متغیر زیر stringاست و اینو از قبل میدونستیم که چجوری string
تعریف میکنن.
"a="Sajjad Rahmani
دسترسی به مولفه:
فرضکنید میخوایم به آخرین مولفه از رشتهی ( Sajjad Rahmaniآخرین مولفهش میشه )iدسترسی
پیدا کنیم .در این صورت داریم:
"a="Sajjad Rahmani
)]print(a[-1
برای دسترسی پیدا کردن به ( ajjمولفههایی با اندیس 1تا )3باید بگیم:
"a="Sajjad Rahmani
)]print(a[1:4
اگر دوباره دارید میپرسید که چرا میگیم 1تا 3و مینویسیم 1تا ،4مشخصه که مباحث قبلی رو
درست نخوندید! چون چندین هزار بار [!] تا االن روی این موضوع تاکید کردیم که اون 4آخر رو لحاظ
نمیکنه و یکی کمترش رو لحاظ میکنه!
نکته :رشته ( )stringهم ساختاردادهای تغییر ناپذیر است! یعنی نمیتونیم به عنوان مثال بگیم:
"a[0]="R
نکته :عملگر +در مورد stringها میاد اونها رو بهم میچسبونه و میذاره کنار هم!
"a="Sajjad
"b="Rahmani
)print(a+b
خروجی:
SajjadRahmani
)print(a+" "+b
نکته :عملگر * در مورد stringها میاد اون stringرو به تعدادی که اون stringرو دَرِش ضرب
میکنیم ،تکرار میکنه.
مثالً:
"a="Sajjad
)print(a*3
میاد 3بار Sajjadرو تکرار میکنه و خروجی میشه:
SajjadSajjadSajjad
متدهای string
"a="SajjadRahmani
))(print(a.upper
خروجی:
SAJJADRAHMANI
sajjadrahmani
"a="SajjadRahmani
))"print(a.find("S
خروجی0 :
نکته :اگر چیزی که وارد میکنید وجود نداشته باشه ،عدد -1رو خروجی میده.
"a="SajjadRahmani
))"print(a.find("s
خروجی[ :توجه کنید که Sداریم ،ولی sنداریم]
-1
نکته :اگر چیزی که وارد میکنیم چندتا اَزَش وجود داشته باشه (مثل jدر عبارت باال) ،اندیس اولین
چیزی که میبینه رو اعالم میکنه!
"a="SajjadRahmani
))"print(a.find("j
خروجی:
2
این فایلها صرفاً برای خریدار این آموزشها تهیهشدهاست و هرگونه کپی برداری ،به اشتراکگذاری و ...این فایلها
غیرقانونی و حرام است و هیچ گونه رضایت مولف را در بر ندارد.