Python Data Structure - Arabic


تنبيه : لمستخدمي الهاتف بدل لوضع الشاشة الأفقي

مقدمة

دي مراجعة سريعة على الـ Dictionary, List, Tuple و الـ Set وهم اربع انواع مختلفة للـ Python Data Structure معرفة الفروق مبينهم بتعرفك الاستخدام الصحيح وسهولة قراة الـ Error Message.

تقدر تروح للعناوين بسرعة من هنا:

 

?What is Data Structure

هي طريقة تنظيم العناصر (بيانات مثلا) بتنظيم مناسب بحيث توفر سهولة الاستخدم عند الحاجة, بيتم استدعا العناصر دي حسب الـ Data Type باستخدام الـ Indexing مثلآ, لو مش مفهوم الكلام, عادي كمل الدرس هتوضح الفكرة

 

Mutable Data Type

يعني يقبل التعديل زي الكود التالي, عكسها الـ Immutable Data Type, لاحظ في الـ Output ان عند عمل del كامل او على عنصر واحد مبتفرقش الـ Data Type من حيث كونها Immutable او Mutable

 

###### Remove one element ######
list_test = ['a', 'z', [1, 2, 3]]
# try it on tuple_test type and see what happen
tuple_test = ['a', 'z', [1, 2, 3]]
del list_test[1]
print(list_test)


###### Clear all the items ######
list_test = ['a', 'z', [1, 2, 3]]
# try it on tuple_test type and see what happen
tuple_test = ['a', 'z', [1, 2, 3]]
del list_test[:]
print(list_test)


###### Delete whole ######
list_test = ['a', 'z', [1, 2, 3]]
# try it on tuple_test type and see what happen
tuple_test = ['a', 'z', [1, 2, 3]]
del list_test
print(list_test)


###### Assignment ######
list_test = ['a', 'z', [1, 2, 3]]
# try it on tuple_test type and see what happen
tuple_test = ['a', 'z', [1, 2, 3]]
list_test[2] = 'new'
print(list_test)

 

Index-able Data Type

وتعني ان تقدر تستدعي عنصر واحد او نطاق من العناصر (Range) من داخل المجموعة, وبدمجها مع Mutable/Immutable Data Type تقدر تحدد الاستخدام الصحيح, مع ملاحظة التالي, في الـ Dictionary بيتم الـ Indexing باستخدام الـ Key مش الـ Index number

 

Index

list_test = ['a', 'z', 'c', 'm', 'q']
dict_test = {'a': 'Ayman', 'z': 'zoo', 'c': 'cat'}

###### Index the first element ######

print('List: ==> ', list_test[0])
print('Dic: ==> ', dict_test['a'])
# OR
print('Dic using get(): ==> ', dict_test.get('a'))


###### Range of elements ######

print('Range, for List: ==> ', list_test[1:3])


###### Error ######

set_test = {'a', 'z', 'c'}
dict_test = {'a': 'Ayman', 'z': 'zoo', 'c': 'cat'}

print('Dict: ==> ', dict_test[0])
# And with set
print('Set: ==> ', dict_test[0])

 

Range indexing

لاحظ التالي, لو عاوز اعمل Range indexing للـ Dict ﻻزم اغير الـ Values او الـ Keys لـ List Data Type

 

list_test = ['a', 'z', 'c', 'm', 'q']
dict_test = {'a': 'Ayman', 'z': 'zoo', 'c': 'cat', 'm': 'man', 'q': 'quit'}


###### List indexing range ######

print('Range, for List: ==> ', list_test[1:3])


###### Dictionary indexing range ######

# key range
keys_list = []
for el in dict_test.keys():
    keys_list.append(el)
range_keys_list = keys_list[1:3]
print(range_keys_list)

# values range
values_list = []
for el in dict_test.values():
    values_list.append(el)
range_keys_list = values_list[1:3]
print(range_keys_list)

 

Duplicate-able Member

هل المجموعة تقبل تكرار العنصر ولا لا, في المثال التالي لاحظ الـ Output لكل نوع من الـ Data Type

 

list_test = ['a', 'z', 'c', 'a']
dict_test = {'a': 'Ayman', 'z': 'zoo', 'c': 'cat', 'a': 'animal'}
tuple_test = ('a', 'z', 'c', 'a')
set_test = {'a', 'z', 'c', 'a'}


###### Output on duplicated member ######

# Allowed
print('List result: ', list_test)
# Unallowed
print('Dic result: ', dict_test)
# Allowed
print('Tuple result:', tuple_test)
# Unallowed
print('Set result: ', set_test)

 

لو كتبت الكود بنفسك هتلاحظ التالي:

  • الـ Set, بتظهر عنصر واحد فقط من المكرر وتلغي الاخر.
  • الـ Dictionary, بيعتمد على ان الـ Key ميكونش مكرر انما الـ Value مش مشكلة, جرب تغير الكود.
  • الـ Dictionary, بيلغي اول عنصر مكرر ويسيب الاخير, لاحظ كلمة 'animal', واختفاء 'Ayman'.

 

Squence Data Type

يهمنا في الـ بايثون انه هو الترتيب الخاص بالمجموعة, بمعنى ابسط زي ما انت رتبت العنصر في المجموعة هتلاقيها, شوف المثال التالي:

 

list_test = ['car', 'dad', 'mom']
set_test = {'car', 'dad', 'mom'}


# Has Squence
print('List result: ', list_test)
# Not has Squence
print('Set result: ', set_test)

 

لاحظ اني مذكرتش الـ Dict وده لان ملهاش squence, الـ Dict بتستخدك ما يسمى Mapping(تفصيليا), للتوضيح اكتر لما تجيب عنصر من الـ List مثلآ, لازم تعرف الـ Index number الخاص بيه انما الـ Dict بتجيبه بالـ Key مهما كان مكانه فين, اكتب الكود ولاحظ التالي:

  • يكفي انك في الـ Dict تبقى عارف اسم الـ Key.
  • فى الـ List لازم تبقي عارف الـ Index number.
  • بنئآ على النقطين الـ فاتو دول التعامل مع الـ Dict اسهل.

 

# List get Zoo item
dict_test = {'a': 'ayman', 'z': 'ZOO', 'q': 'quite', 'n': 'none'}
print(dict_test.get('z'))

# List get Zoo item
list_test = ['ayman', 'quite', 'ZOO', 'none']
print(list_test[2])

 

Tuple Note

لو حتحط عنصر واحد داخل الـ tuple لازم لازم تحط بعده الـ comma, اكتب الكود التالي, وهتلاحظ ان بدون الـ comma الـ Data Type بتتغير.

 

Summary

BracketsHas SquenceDuplicate MemberIndex-ableMutable 
[ value, Value ]List
( value, value )ΧTuple
{ key : Value }ΧΧDic
{ value, value }ΧΧΧΧSet

 

النهاية

دي مراجعة بسيطة وسريعة على الـ Python Data Structure, الموضوع متعمق كتير لكن الافضل انك تعرف بعض الفروق الاساسية والباقي يجي مع الوقت وكثرة كتابة الكود.

 

المراجع
W3schools