Python Data Structure - Arabic
تنبيه : لمستخدمي الهاتف بدل لوضع الشاشة الأفقي
مقدمة
دي مراجعة سريعة على الـ Dictionary, List, Tuple و الـ Set وهم اربع انواع مختلفة للـ Python Data Structure معرفة الفروق مبينهم بتعرفك الاستخدام الصحيح وسهولة قراة الـ Error Message.
تقدر تروح للعناوين بسرعة من هنا:
- ?What is Data Structure
- Mutable Data Type
- Index-able Data type
- Duplicate-able Member
- Sequence Data Type
- Tuple Note
- Summary
?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
Brackets | Has Squence | Duplicate Member | Index-able | Mutable | |
[ value, Value ] | √ | √ | √ | √ | List |
( value, value ) | √ | √ | √ | Χ | Tuple |
{ key : Value } | Χ | Χ | √ | √ | Dic |
{ value, value } | Χ | Χ | Χ | Χ | Set |
النهاية
دي مراجعة بسيطة وسريعة على الـ Python Data Structure, الموضوع متعمق كتير لكن الافضل انك تعرف بعض الفروق الاساسية والباقي يجي مع الوقت وكثرة كتابة الكود.
المراجع
W3schools