فصل سوم

ساختمان های داده

در این فصل چیزهایی توضیح داده میشود که قبلا  در مورد انها یاد گرفتید و جزئیات بیشتری از آن ها در این فصل یاد می گیرید

چیز های بیشتر در مورد لیست ها

این جا تمام متد های لیست ها شرح داده شده است:

list.append(x)

یک شئ  اضافه می کنه به آخر لیست – با   [ a[len(a):] = [x  برابر است

مثال :
a = ['iraj'  , 'jelodari' , 2001 , 'iraj'  ,' iraj' , 2001 ]
a.append (‘yahoo’)
a
['iraj', 'jelodari', 2001, 'iraj', 'iraj', 2001, 'yahoo']
list.extend(L)

آیتم های آرگومان داده شده را  به دیکشنری اضافه می کند با عبارت   a[len(a):] = L.  برابر است

مثال۱ :

>>> b=[4,5]
>>> a=[1,2,3]
>>> a.extend(b)
>>> a
[۱, ۲, ۳, ۴, ۵]
list.insert(i, x)

عنصر ایکس را در ایندکس i  ام قرار میدهد اما عنصرi  ام را حذف نمی کند بلکه به خانه ۱+ i انتقال میدهد

مثال :

insert(0, x)

x را اول لیست قرار می دهد

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

>>> a = [0,2,3,4,5,6,7,8,9]
>>> a.insert(1,1)
>>> a
[۰, ۱, ۲, ۳, ۴, ۵, ۶, ۷, ۸, ۹]
list.remove(x)

اولین عنصری که با ایکس برابر باشد را حذف می کند اگر چنین عنصری پیدا نشد خطا می دهد

مثال :

>>> a = ['a','b' ,'c','a']
>>> a.remove('a')
>>> a
['b', 'c', 'a']
list.pop([i])

  درون پرانتز ایندکس یک عنصر را وارد می کنیم ان گاه این عنصر از لیست حذف می شود و مقدار آن بر گردانده می شود

اگر ایندکس رو نذاریم  a.pop()  آخرین عنصر لیست را حذف می کند و نمایش می دهد

مثال :

>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> a.pop(3)
۳
>>> a.pop()
۹
>>> a
[۰, ۱, ۲, ۴, ۵, ۶, ۷, ۸]
list.index(x)

ایندکس نخستین عنصری از لیست را با ایکس برابر باشد را بر می گرداند اگر هیچ عنصری برابر ایکس یافت نشد خطا می دهد

مثال :

>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> a.pop(3)
۳
>>> a.pop()
۹
>>> a
[۰, ۱, ۲, ۴, ۵, ۶, ۷, ۸]
list.count(x)

تعداد ایتم های تکرار شده از آیتم ایکس را بر می گرداند

مثال :

>>> a = ['i','i','i','r','a','j']
>>> a.count ('i')
۳
list.sort()

اشیای درون لیست را مرتب می کند

مثال :

>>> a = [ 5 , 4 , 3 , 2 , 1 , 99 ]
>>> a.sort ( )
>>> a
[۱, ۲, ۳, ۴, ۵, ۹۹]
list.reverse()

اشیای درون لیست را بر عکس مرتب می کند

>>> a = [ 1 , 2 , 3 , 4 , 5 , 99]
>>> a.reverse ( )
>>> a
[۹۹, ۵, ۴, ۳, ۲, ۱]

مثال هایی از موارد استفاده این متد ها :

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
۲ ۱ ۰
>>> a.insert(2, -1)
>>> a.append(333)
>>> a [66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
۱
>>> a.remove(333)
>>> a [66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a [333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a [-1, 1, 66.25, 333, 333, 1234.5]

استفاده از لیست همچون پشته (stack)

متد ها استفاده از لیست بعنوان پشته را بسیار راحت می کنند . در پشته آخرین عنصر اضافه شده -اولین عنصر دریافتی هستش ( آخرین ورودی-اولین خروجی). برای افزودن آیتم به آخر لیست از append و برای گرفتن آخرین آیتم لیست از ‌pop بدون ایندکس استفاده می کنیم :

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack [3, 4, 5, 6, 7]
>>> stack.pop() 7
>>> stack [3, 4, 5, 6]
>>> stack.pop()
۶
>>> stack.pop()
۵
>>> stack [3, 4]

استفاده از لیست ها همچون صف ها ( Queues )

شما می تونید به راحتی یک لیست رو به صورت صف استفاده کنید در صف اولین عنصر اضافه شده به لیست – اولین عنصر دریافتی هستش ( اولین ورودی- اولین خروجی) برای اضافه کردن یک عنصر به ته صف از  append()  استفاده می شود و برای دریافت یک عنصر از اول صف از pop(0)  استفاده می شود برای مثال :

>>> queue = ["Eric", "John", "Michael"]
>>> queue.append("Terry") # Terry دریافت شد >>> queue.append("Graham") # Graham دریافت شد
>>> queue.pop(0) 'Eric'
>>> queue.pop(0) 'John'
>>> queue ['Michael', 'Terry', 'Graham']

دریافت های لیست

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

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

اینجا ما یک لیست از اعداد را گرفتیم و یک لیست با ۳ برابر عناصر دیگر بر گردوندیم :

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[۶, ۱۲, ۱۸]

و اینجا یک ماتریس کوجچیک درست می کنیم :

>>> [[x, x**2] for x in vec]
[[۲, ۴], [۴, ۱۶], [۶, ۳۶]]

اینجا هم یک متد را برای فراخوانی عناصر لیست به کار گرفتیم :

>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit] # نگران نباشید بعدن توضیح داده می شود ['banana', 'loganberry', 'passion fruit']

با به کار بردن جمله if می تونیم بعضی چیزا رو که می خواهیم فیلتر کنیم :

>>> [3*x for x in vec if x > 3]
[۱۲, ۱۸]
>>> [3*x for x in vec if x < 2]
[]

چند تایی ها ( ماتریس ها ) اغلب بدون پرانتز نوشته می شوند اما نه اینجا :

>>> [x, x**2 for x in vec] # error - برای چند تایی ها پرانتز احتیاج داریم File "<stdin>", line 1, in ? [x, x**2 for x in vec] ^ SyntaxError: invalid syntax
>>> [(x, x**2) for x in vec]
[(۲, ۴), (۴, ۱۶), (۶, ۳۶)]

اینجا هم تعدادی حلقه تو در تو و با رفتار های متفاوت داریم :

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2] # print [8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2] # print [6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[۸, ۱۲, -۵۴]

دریافت های لیست می تونند برای عبارات پیچیده و تابع های تو در تو نیز به کار گرفته شوند :

>>> [str(round(355/113, i)) for i in range(1, 6)]
['۳٫۱', '۳٫۱۴', '۳٫۱۴۲', '۳٫۱۴۱۶', '۳٫۱۴۱۵۹']

دریافت های تو در تو لیست

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

ملاحضه کنید مثال زیر را که یک ماتریس ۳ * ۳ را نشان می دهد. توی یک لیست ۳ لیست دیگه در هر ردیف نگه داشته شده ( هر ۳تا نقظه یه اینتره)

>>> mat = [ ... [1, 2, 3], ... [4, 5, 6], ... [7, 8, 9], ... ]

حالا- اگه بخواهیم  می تونیبم جای ستون ها و ریف ها با هم عوض کنیم ما باید از یک  دریافت لیست  استفاده کنیم :

>>> print([[row[i] for row in mat] for i in [0, 1, 2]]) # کمی دقت کنید سخت نیست [[۱, ۴, ۷], [۲, ۵, ۸], [۳, ۶, ۹]]

کمی دقت کنین سخت نیستند. یه ورژن دیگه از مثال بالا را در زیر بطور وازح تر قرار دادم:

for i in [0, 1, 2]:
    for row in mat:
        print row[i],
        print()

در حقیقت شما می بایست استفاده از تابع را به عبارت های پیچیده ترجیح بدهید و تابع    zip()این کار بزرگ را برای این مورد ( جا به جا کردن سطر و ستون ) انجام می دهد

>>> list(zip(*mat))
[(۱, ۴, ۷), (۲, ۵, ۸), (۳, ۶, ۹)]

برای دیدن چگونگی عملکرد جزییات عملکرد * به فصل ۲   و بخش  گشودن لیست های آرگومانی  مراجعه کنید

 

عبارت del

یک راه برای حذف کردن یک آیتم از لیست استفاده استفاده از عبارت   del است تفاوت  del  با pop ( )  اینه که متد  pop ( )   یک مقدار را بر می گردونه . یکی دیگه از تفاوت ها اینه که با  del  می توان چند آیتم یا کل آیتم ها را از لیست حذف کرد . برای مثال :

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a [1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a [1, 66.25, 1234.5]
>>> del a[:]
>>> a []

همچنینdel  می تونه برای پاک کردن متغییر ها مورد استفاده قرار بگیره :

>>> del a

رجوع به این متغییر پس از حذف آن خطا می دهد ( تا وقتی که یک مقدار دیگه به اون نسبت داده بشه)- در آینده با کاربرد های  del بیشتر آشنا می شیم

تاپل ها

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

تاپل ها با کاما(,) از هم جدا می شوند.شکل ظاهری تاپل ها همانند این است که چند داده را به یک متغیر انتساب بدهید اما باید بدانید که نوع داده ی نگهداری شده از نوع تاپل است

>>> t = 12345, 54321, 'hello!'
>>> t[0]
۱۲۳۴۵
>>> t (12345, 54321, 'hello!')
>>> # Tuples may be nested:
...
u = t, (1, 2, 3, 4, 5)
>>> u ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

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

  • در این مثال دو متغیر از نظر نوع داده ها و مقدار داده ها با هم تفاوتی ندارند. ( اما از نظر مکان ذخیره سازی داده ها با هم متفاوت هستند )

a = 1, 2, 3, 4
b = (1, 2, 3, 4)
  • نکته۱: به این نکته توجه داشته باشید که داده های چند قسمتی می توانند داده های چند قسمتی دیگر را در خود نگه دارند.

  • نکته۲: برای تاپل های تک عضوی باید به صورت زیر عمل کنید.

a = 33  # این یه متغیره
 b = 33, # ولی این تاپله. کما بعد از ۳۳

شاید فکر کنید که زبان خیلی سختی است اما فقط کافی است کمی دقت داشته باشید تا متوجه آسانی و انعطاف پذیری باشید

اپراتورها در تاپل

اپراتورهایی که برای تاپل ها تعریف شده اند + ( بین دو تاپل ) و * ( بین یک عدد و تاپل )هستند .

  • سعی کنید برای این کار تاپل ها را درمیان پرانتز قرار دهید یا به یک متغیر انتساب دهید به مثال توجه کنید:

>>> 1, 2, 3 + 4, 5, 6
(۱, ۲, ۷, ۵, ۶)
>>>(1, 2, 3) + (4, 5, 6)
(۱, ۲, ۳, ۴, ۵, ۶)
>>> t= 1 , 2 , 3 , 4 ,5 , 6
>>> t (1, 2, 3, 4, 5, 6)
>>> t2 = 2*t
>>> t2 (1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6)
>>> t3= 3*t
>>> t3 (1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6)

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

تاپل ها موارد استفاده زیادی دارند برای مثال : زوج های مختصاتی (x,y)   . تاپل ها مثل رشته ها تغییر ناپذیر هستند ذخیره کردن یک آیتم به جای آیتم های ذخیره شده در تاپل ممکن نیست . اما می شه تاپلی ساخت که ایتم هاش تغییر پذیر باشند – همانند لیست ها.

یک مشکل خاصی در ساختمان تاپل هایی که شامل ۰ و ۱  آیتم  می باشند هست :  نحو آن خاصیت عجیبی دارد تاپل های خالی با یک جفت پرانتز خالی ساخته می شوند یک تاپل با یک شئ  ساخته میشه با یک مقدار و یک کما ( لازم نیست که ۱ مقدار و کما درون پرانتز گذاشته بشن) . بیریخته اما موثره . برای مثال :

 

>>> empty = ()
>>> singleton = 'hello', # <-- به کما بعد از تک آیتم دقت کنید
>>> len(empty)
۰
>>> len(singleton)
۱
>>> singleton ('hello',)

 

یک تاپل ۳ تایی رو می شه به سه متغییر نسیت داد . بطوری که هر متغییر یه آیتم از تاپل رو بپذیره:

>>> t=(1,2,3)
>>> a,b,c = t
>>> a
۱
>>> b
۲
>>> c
۳

 مجموعه ها

مجمو.عه ها در پایتون  بین دوتا کروشه   {} قرار می گیرند و ایتم ها به وسیله کما از هم جدا می شوند با تابع set ( ) مجموعه های جدید میشه درست کرد نکته این که : برای درست کردن مجموعه خالی از تابع  set ( ) استفاده می کنیم از براکت خالی استفاده نمی کنیم چون که از براکت خالی بعدن در بخش بعد برای درست کردن دیکشنری خالی استفاده می کنیم

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} # تکرار در مجموعه ها یه حساب نمی آید
>>> print(basket) {'orange', 'banana', 'pear', 'apple'}
>>> fruit = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> fruit = set(basket) # ساخت یک مجموعه بدونه استفاده از براکت ها
>>> fruit {'orange', 'pear', 'apple', 'banana'}
>>> fruit = {'orange', 'apple'} # براکت ها برای مجموعه ها همانند []برای لیست ها می باشند
>>> fruit {'orange', 'apple'}
>>> 'orange' in fruit # تست سریع اعضای مجموعه True
>>> 'crabgrass' in fruit False
>>># روی دو کلمه با حروف منحصر به فرد set نمایش عملکرد
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # مجموعه آ را چاپ می کند {'a', 'r', 'b', 'c', 'd'}
>>> a - b # حروفی که درون آ باشد اما درون بی نباشد {'r', 'd', 'b'}
>>> a | b # حروفی که درون کل آ و بی باشد {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # حروفی که فقط درون آ و بی هستند {'a', 'c'}
>>> a ^ b # تمام حروف آ و بی به غیر از مشترک ها {'r', 'd', 'b', 'm', 'z', 'l'}

اینجا هم نحو دریافتی مجموعه   مثل   دریافتی لیست می باشد :

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a {'r', 'd'}

مجموعه ای را از حروف ‘abracadabra’ درست می کند که شامل حروف ‘abc’ نباشد

توابع مجموعه ها

 

len(s)

اندازه مجموعه  اس را بر میگرداند

>>> s={'a','i','r','j'}
>>> len(s)
۴
x in s

اگر کاراکتر ایکس درون مجموعه قرار داشته باشد ارزش درست را  بر می گرداند

>>> s={'a','i','r','j'}
>>> 'a' in s
True
x not in s

اگر کاراکتر ایکس درون مجموعه قرارنداشته باشد ارزش درست را  بر می گرداند

>>> s={'a','i','r','j'}
>>> 'b' not in s
True
isdisjoint(x)

اگر کاراکتر ایکس درون مجموعه باشد ارزش نا درست و اگر درون مجموعه نباشد ارزش درست را بر می گرداند

>>> s = {'a','e','d','i','j','l','o','r'}
>>> s.isdisjoint('d')
False
>>> s.isdisjoint('k')
True
issubset(other)

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

>>> s={1,2,3,4}
>>> s.issubset(set([1,2,3,4,5,6]))
True
issuperset(other)

تست می کند که آیا مجوعه ی جاری پدر مجموعه درون سوپرست هست یا نه .

>>> s={1,2,3,4}
>>> s.issuperset({1,2})
True
union(other, ...)

.یه مجموعه جدید با تمام آیتم های مجموعه قبلی به اضافه آیتم های مجموعه درون آزگومان ایجاد میکند

>>> s.update('123456')
>>> s.union('7890')
{'۱','۰','۳','۲','۵','۴','۷','۶','۹','۸'}
intersection(other, ...)

آیتم های درون آرگومان را از مجموعه اصلی حذف می کند و در قالب یه مجموعه جدید بر می گرداند

>>> s = {'1', '3', '2', '5', '4', '6'}
>>> s.intersection('135')
{'۱', '۳', '۵'}
difference(other, ...)

آیتم های درون آرگومان را از مجموعه اصلی حذف میکند و باقی مانده را در قالب یه مجموعه جدید بر می گرداند

>>> s = {'1', '3', '2', '5', '4', '6'}
>>> s.difference('135')
{'۲','۴','۶'}
set ^ other

تمام آیتم های درون ۲ مجموعه را در قالب یه مجموعه جدید بر می گرداند

>>> s={1,2,3,4}
>>> b={5,6,7,8}
>>> m = s ^ b
>>> m
{۱, ۲, ۳, ۴, ۵, ۶, ۷, ۸}
copy()

یک مجموعه جدید شامل تمام عناصر درون اس ایجاد میکند- از اس کپی می گیرد

>>> b.update('12345')
>>> f=b.copy()
>>> f
{'۱', '۳', '۲', '۵', '۴'}
update(other, ...)

آیتم یا مجموعه درون آرگومان را به مجموعه اصلی اضافه می کند

>>> v=set()
>>> v.update('iraj')
>>> v
{'i', 'a', 'r', 'j'}
set &= other & ...

آیتم های مشترک بین مجموعه اس و مجموعه ی دیگر را در مجموعه اصلی ( اس ) باقی می گزارد و بقیه را حذف می کند

>>> b ={'1', '3', '2', '5', '4', '7', '6'}
>>> s= {'a', 'i', 'j', '1', '3', 'r', '4', '2'}
>>> s &= b
>>> s
{'۱', '۳', '۲', '۴'}
set -= other

مجموعه اس را آپدیت میکند بدین صورت که آیتم پیدا شده درون مجموعه دیگر را از اس حذف می کند

>>> s={'1','2','3','4'}
>>> b={'1','4'}
>>> s-=b
>>> s
{'۳', '۲'}

>>> m={'8','9'}
>>> s-=m
>>> s
{'۳', '۲'}
set ^= other

آپدیت می کند مجموعه اس را به این صورت که تمام عناصر غیر مشترک در هر دو مجموعه را در اس نگه می دارد

>>> s={'1','2','3','4'}
>>> b={'4','5','6','2'}
>>> s^=b
>>> s
{'۱', '۳', '۵', '۶'}
add(elem)

آیتم را به مجموعه اصلی اضافه می کند

>>> s
{'a', 'i', 'r', 'j', 'e'}
>>> s.add('jelodri')
>>> s
{'a', 'i', 'j', 'jelodri', 'r'}
remove(elem)

عنصر را از درون مجموعه حذف می کند اگه عنصر موجود نبود خطا می دهد

>>> s={'i','r','a','j'}
>>> s.remove('i')
>>> s
{'a', 'r', 'j'}
>>> s.remove('m')
Traceback (most recent call last):
File "", line 1, in
s.remove('m')
KeyError: 'm'
discard(elem)

اگر عنصر درون مجموعه بود آن را حذف می کند

>>> s={'1','2','3','4'}
>>> s.discard('2')
>>> s
{'۱', '۳', '۴'}
>>> s.discard('99')
>>> s
{'۱', '۳', '۴'}
pop()

یک عنصر را از مجموعه به دلخواه از مجموعه حذف می کند و آن را بر می گرداند اگر مجموعه خالی باشد خطا می دهد

>>> s.pop()
'۱'
>>> s.pop()
'۳'
>>> s.pop()
'۲'
>>> s.pop()
'۴'
>>> s.pop()
Traceback (most recent call last):
File "", line 1, in
s.pop()
KeyError: 'pop from an empty set'
clear()

تمام مجموعه را پاک می کند

>>> s={'1','2','3','4'}
>>> s.clear()
>>> s
set()

دیکشنری ها

نوع داده ای دیگر که بسیار مفید است و در پایتون ساخته شده است دیکشنری ها هستند برخلاف دنباله ها ( لیست ها -رشته ها -مجموعه ها ) که با اعداد ایندکس گذاری شده اند دیکشنری ها با کلید هایی ایندکس گذاری می شوند که  تغییر ناپذیر می باشند رشته ها و اعداد (تغییر ناپذیرند) می توانند کلید باشند تاپل ها ( تغییر ناپذیرند) نیز به عنوان کلید می توانند مورد استفاده قرار بگیرند اگر که آنها تنها شامل رشته ها یا اعداد یا تاپل های دیگری باشند. (اگر تاپل شامل آیتم های تغییر پذیر چه مستقیم چه غیر مستقیم  باشند نمیشه از آنها به عنوان کلید استفاده کرد ) . لیست ها به عنوان کلید استفاده نمی شوند ( تغییر پذیرند) زیرا لیستها می تونند با متدی مثل append()وextend().  یا با جایگذین کردن آیتم  در ایندکس مورد نظر اصلاح بشوند

بهترین فکر برای ایجاد یک دیکشنری  مجموعه ای از زوج های {مقدار : کلید}   است . برای درست کردن یک دیکشنری خالی، از یک جفت کروشه استفاده می کنیم برای جدا کردن زوج های { مقدار: کلید } از سمی کالون استفاده می کنیم در خروجی هم این سمی کالون ها نشان داده می شوند

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

 

اجرای list(d.keys()) روی دیکشنری یک لیست از تمام کلید ها بر می گردونه. اگر می خواید لیست بر گردونده مرتب باشه کافی ااست  فقط  ازsorted(d.keys()) استفاده کنیم[۱] .  برای چک کردن اینکه  ایا یک کلید درون دیکشنری هست یا نه از in  استفاده می کنیم

مثال هایی کوچیکی از دیکشنری ها :

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack'] 4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys()) ['irv', 'guido', 'jack']
>>> sorted(tel.keys()) ['guido', 'irv', 'jack']
>>> 'guido' in tel True
>>> 'jack' not in tel False

سازنده ی dic ( )  مستقیما از روی لیست  داده شده یک دیکشنری می سازد :

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) {'sape': 4139, 'jack': 4098, 'guido': 4127}

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

>>> {x: x**2 for x in (2, 4, 6)}
{۲: ۴, ۴: ۱۶, ۶: ۳۶}

وقتی کلید ها  فقط یک رشته ساده هستند این نوع نحو دیکشنری راحتره :

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

تکنیک های حلقه گذاری

وقتی که یک حلقه دیکشنری را طی می کند کلید ها و مقدار های متناظر در یک زمان می توانند دریافت بشوند این کار را متد  items()  انجام می دهد :

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
... gallahad the pure robin the brave

وقتی حلقه  یک  دنباله ( لیست -مجموعه-دیکشنری-رشته) را طی می کند ایندکس موقعیت و مقدار متناظر هم زمان با استفاده از تابع  enumerate()   دریافت می شوند

>>> for i, v in enumerate(['tic', 'tac', 'toe']): # دنباله اینجا یک لیست است
... print(i, v)
... ۰ tic 1 tac 2 toe

در حلقه های ۲ دنباله ای یا بیشتر  در یک زمان  همه می تونن با هم جفت بشند به وسیله تابع  zip ( )

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['iraj jelodari', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
... print('What is your {0}? It is {1}.'.format(q, a))
... What is your name? It is iraj jelodari. What is your quest? It is the holy grail. What is your favorite color? It is blue.

برای طی معکوس  یک دنباله در حلقه از  تابع  reversed()  استفاده می کنیم

>>> for i in reversed(range(1, 10, 2)):
... print(i)
... ۹ ۷ ۵ ۳ ۱
>>>   l = [ 'i','r','a','j']
>>>  for i in reversed ( l ) :
...        print ( i )
...
j
a
r
i

برای مرتب کردن یک دنباله در حلقه ها از  تابع  sorted() استفاده می کنیم

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
... print(f)
... apple banana orange pear
l = ['i','r','a','j']

>>> for i in sorted ( l ) :
        print ( i ) 

a i j r

3 دیدگاه برای «فصل سوم»

  1. من یه مشکلی داشتم.
    وقتی بخوای اعضای یک لیست رو پرینت کنی همیشه علامت کروشه باقی میمونه. اگه از دستور while یا for هم استفاده کنی اعضای لیست رو زیر هم چاپ میکنه..
    برای اینکه اعضای لیست با یک فاصله از هم و بدون کروشه چاپ بشه چی کار باید کرد؟
    ممنون

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *