
المصفوفات في بايثون
المصفوفات (Arrays) هي مجموعة من العناصر التي تكون من نفس النوع و هي شائعة في أغلب لغات البرمجة, لكنها في لغة بايثون ليست شائعة بكثرة, و إن في أي لغة برمجة مهم جداً القدرة على التعامل مع المعلومات الكثيرة أو ما يسمى البيانات الضخمة big data و يوجد الكثير من المعلومات أو البيانات يفترض علينا التعامل معها و إستخلاصها و طريقة التصرف بها.
يوجد في لغة بايثون 4 أنواع من المصفوفات وهي:
- Lists.
- Dictionaries.
- Tuple.
- Sets.
القوائم list في بايثون
القوائم Lists تعتبر نوع مهم من أنواع البيانات في بايثون و لإستخدامها يجب أن يكون لدينا مجموعة عناصر نخزنها في لسته مثل نصوص و ارقام و لإنشاء لستة نستعمل الأقواس المربعه [] و هي مرتبة قابلة للتعديل, أي هي مثل ليستة الطعام الموجودة في المطاعم و بها الأصناف.
مثال 1
>>> mylist = ["Muhammad", "kaissar", "saja"] >>> mylist ['Muhammad', 'kaissar', 'saja'] >>> mylist2 = [1,2,3,4,5] >>> mylist2 [1, 2, 3, 4, 5] >>> mylist3 = [1, 2, 3, 4, 5, "wazeer"] >>> mylist3 [1, 2, 3, 4, 5, 'wazeer']
كما نلاحظ في المثال نستطيع إنشاء لسته ببيانات نصية كما في mylist و لسته ببيانات رقمية كما في mylist2 و لسته مختلطة نصوص و ارقام كما في mylist3. كل عنصر من عناصر المصفوفة يترقم برقم يسمى index يبدأ من الصفر 0.
مثال 2
>>> mylist = [1,2,65,9,5] >>> mylist[3] 9 >>> mylist[0:3] [1, 2, 65] >>> mylist[-1] 5 >>> len(mylist) 5 >>> max (mylist) 65 >>> min(mylist) 1 >>> list("1,2,3,4,5,6,7") ['1', ',', '2', ',', '3', ',', '4', ',', '5', ',', '6', ',', '7'] >>> list("kaissar") ['k', 'a', 'i', 's', 's', 'a', 'r']
نلاحظ في البداية أنشأنا قائمة بإسم mylist و وضعنا بها بعض القيم ثم كتبنا mylist[3] وهذه تعني أعطنا الأندكس index رقم 3 من هذه المصفوفة و بما أن الأندكس يبدأ العد به من الصفر فكان الأندكس الثالث هو 9.
ثم في السطر الذي يليه كتبنا mylist[0:3] أي اعطينا مجموعة الأندكسات من صفر حتى ثلاثة و معنى mylist[-1] أي أعطينا الأندكس الأخير ة إبدأ العد من الأخير و معنى len أي اعطينا طول هذه القائمة و max تعني معرفة أكبر رقم في هذه القائمة و min لمعرفة أصغر رقم في هذه القائمة.
و في النهاية أعطيناه مجموعة أرقام و قلنا لشل البايثون قم بتحويلها إلى قائمة list و بعده أعطيناه نص أيضاً و حوله لنا إلى قائمة.
مثال 3
>>> mylist = [1,2,3,5,7,6] >>> mylist [2] = 4 >>> mylist [1, 2, 4, 5, 7, 6] >>> mylist.append (7) >>> mylist [1, 2, 4, 5, 7, 6, 7] >>> mylist.count (2) 1 >>> mylist.append (2) >>> mylist.append (2) >>> mylist [1, 2, 4, 5, 7, 6, 7, 2, 2] >>> mylist.count (2) 3 >>> mylist.index (4) 2 >>> mylist.insert (0,2) >>> mylist [2, 1, 2, 4, 5, 7, 6, 7, 2, 2]
قمنا بإنشاء لستة و بها عدة عناصر ثم بدأنا بتنفيذ عدة عمليات عليها و العمليات هي:
- العملية الأولى كتبنا mylist [2] = 4 و هذ تعني قم باستبدال الأندكس رقم 2 الذي هو 3 استبدله بالرقم 4.
- العملية الثانية كتبنا mylist.append(7) و هذا يعني قم بإضافة الرقم 7 إلى هذه القائمة و سوف يضاف في النهاية.
- العملية الثالثة كتبنا mylist.count (2) يعني كم رقم 2 في هذه القائمة و ارجع لنا 1 أي توجد اثنان واحدة.
- العملية الثالثة و الرابعة كتبنا mylist.append(2) كتبناها مرتين أي اضف الرقم 2 مرتين في هذه أللستة.
- العملية الخامسة قمنا بالاستعلام كم رقم 2 في هذه أللستة و رجع لنا 3 و بالطبع يوجد رقم 2 ثلاث مرات.
- العملية السادسة mylist.index(4) أي ما هو الأندكس للرقم 4 في هذه أللستة و ارجع لنا 2 أي أن الرقم 4 ترتيبه 2 في القائمة.
- العملية السابعة mylist.insert(0,2) أي قم بإضافة الرقم 2 في الأندكس الأول الذي ترتيبه 0.
>>> mylist = [5,6,9,1,2,8,8,9,2] >>> mylist.pop() 2 >>> mylist.remove(8) >>> mylist [5, 6, 9, 1, 2, 8, 9] >>> mylist2 = [1,2,3,4,6,7,5,8] >>> mylist2.sort() >>> mylist2 [1, 2, 3, 4, 5, 6, 7, 8]
الدالة pop() حذف عشوائي من قيم المصفوفة مع طباعة القيمة المحذوفة. الدالة remove() حذف محدد من داخل المصفوفة. الدالة sort() ترتيب أبجدي بحال كان نص و ترتيب تصاعدي بحال كان ارقام.
المجموعات Tuple في بايثون
الـ Tuple لا تفرق كثيراً عن Lists لكن اللسته اقوى منها ببعض الإحتياجات, و هي مصفوفة ذو حجم ثابت و يمكن من خلالها تخزين قيم مختلفة الأنواع في نفس الوقت, لكن الـ tuples لا نستطيع أن نضيف عنصر زائد او نغير و يكون الأمر مقيد و اقواسها دائرية () و هي مرتبة و غير قابلة للتعديل.
طريقة إنشاء Tuple بالشكل الآتي
x = ("muhammad" , "kaissar" , "saja") print (x) #output ('muhammad', 'kaissar', 'saja')
مثال 1
>>> x = tuple ("123456") ('1', '2', '3', '4', '5', '6')
أنشأنا tuple و وضعنا بها مجموعة أرقام عرفناها على أنها نصوص وضعناها بين علامات تنصيص, و عند إستخدام أمر الطباعة لهذا المثال سيكون ناتجه بالشكل الآتي
>>> print (x) ('1', '2', '3', '4', '5', '6')
كما لاحظنا عند إستخدام أمر الطباعة قد طبع لنا الأرقام الموجودة في هذا الـ Tuple كل رقم على حدى بداخل علامات تنصيص.
>>> t = ("a","b","c","a")
>>> t.count ("a")
عند الضغط على زر Enter سوف يطبع لنا الرقم 2 أي أنه يوجد حرفين a في هذا المثال.
معرفة تمركز العنصر index
>>> t = ("a","b","c","a")
قمنا بإنشاء متغير وهو t ووضعنا به بعض الأحرف الإنجليزية, و عند إستخدام أمر index و الطلب منه معرفة تمركز الحرف b, سيكون الناتج بالشكل
>>> t.index("b")
عند الضغط على زر Enter سوف يطبع لنا رقم 1 أي أنه مكان تمركز الحرف b في هذه المصفوفة.
>>> t = ("a","b","c","a")
>>> t [0:2]
('a', 'b')
t[0] = "d"
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
أعطانا الخطأ بسبب أن من قوانين Tuple أنها غير قابلة للتعديل.
القواميس dictionaries في بايثون
الكلاس dict يستخدم به الأقواس المعكوفة {} ويتألف من مفتاح و قيمته كالقواميس العربية الكلمة و معناها. وهو غير مرتب unorderd و قابل للتعديل على محتواه changeble.
الشكل العام للقواميس في بايثون
x = {key : value , key2 : value2}
مثال 1
>>> info = {'name':'data', 'age':26} >>> info ["name"] 'data' >>> info ["age"] 26
في البداية عرفّنا متغير info و اعطيناه قيم و مفاتيح لنحصل على قاموس, وبعد ذلك طلبنا key بيانات اول قيمة وهي name و اعطانا القيمة value و هي data, ثم طلبنا من البرنامج طباعة قيم القاموس و طبعها لنا 26.
طباعة القيم في الكلاس dict
من أجل طباعة القيم فقط من مصفوفة dict في بايثون نقوم بإستخدام الأمر .values بعد إسم المتغير الذي يحمل القاموس.
>>> info = {'name':'data', 'age':26} >>> info.values()
قمنا بإنشاء قاموس info و في هذا القاموس قيمتين و أردنا طباعتهم عن طريق الأمر info.values() و هذا الأمر عند الضغط على زر Enter سوف تكون النتيجة.
dict_values(['data', 26])
كما لاحظنا لقد تمت طباعة فقط القيم الموجودة في هذا القاموس.
طباعة المفاتيح في الكلاس dict
من أجل طباعة المفاتيح فقط من مصفوفة dict في بايثون نقوم بإستخدام الأمر .keys() بعد إسم المتغير الذي يحمل القاموس.
>>> info = {'name':'data', 'age':26} >>> info.keys()
قمنا بإنشاء قاموس info و في هذا القاموس مفتاحين و أردنا طباعتهم عن طريق الأمر info.keys() و هذا الأمر عند الضغط على زر Enter سوف تكون النتيجة.
dict_keys(['name', 'age'])
الدوال التابعة للكائن dict في بايثون
>>> info = {'name':'data' , 'age':27} >>> info.clear() >>> info {} >>> ahmed = {'name':'kaissar' , 'age':22} >>> saja = ahmed.copy() >>> saja {'name': 'kaissar', 'age': 22} >>> saja.fromkeys("j") {'j': None} >>> d2 = {"name" : "kaissar" , "age":22} >>> d2.get("age") 22 >>> ("age" in d2) True >>> d2.setdefault("d","a") 'a' >>> d2 {'name': 'kaissar', 'age': 22, 'd': 'a'} >>> d2.items() dict_items([('name', 'kaissar'), ('age', 22), ('d', 'a')])
- الدالة clear() تقوم بحذف محتويات القاموس أي تحذف جميع العناصر.
- الدالة copy() تقوم بنسخ محتويات القاموس kaissar إلى قاموس جديد بإسم saja.
- الدالة fromkeys() تقوم بإنشاء قاموس جديد من المعطيات التي يحددها المستخدم, أنشأ قاموس j و قيمته فارغة.
- الدالة get() تعطينا القيمة المحددة في القاموس و أعطتنا قيمة age التي حددناها.
- الدالة setdefault() تعيد قيمة المفتاح المحدد و إن لم يكن موجوداً تنشئ قاموس قيمة و مفتاح و هنا أنشأت المفتاح d و القيمة a.
- الدالة items() تعيد تهئية عرض القاموس مفتاح و قيمة كل واحدة في قوسين مربعين على حدى.
الكلاس set في بايثون
الـ set هي عبارة عن مصفوفة ليس لها حجم ثابت و إنما متغير, و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد أي مثل الأرقام و النصوص و البيانات العشرية و غيرها, و لا يمكن تبديل أو حذف قيمها بشكل مباشر, و لا يمكنها أن تحتوي على قيم مكررة يعني إذا وضعت فيها نفس القيمة مرتين فإنه سوف يتم تخزين قيمة واحدة و ليس قيمتين.
و تعتبر set غير مرتبة أي عشوائية و ليس لها index و يكثر إستخدامها في إنشاء أو توليد لستة باسوردات قوية و هي قابلة للتعديل changable و يتم إستخدام الأقواس المعكوفة {} المستخدمة مع الكلاس dict و بداخل هذه الأقواس يمكنك تمرير القيم بشكل مباشر بشرط وضع فاصلة بين كل عنصرين.
مثال 1
!#/usr/bin/python3 num = {1, 2, 3, 5, 6, 8, 9}
أنشأنا لسته set و هي num ووضعنا بها مجموعة أعداد صحيحة فقط, و عندما نكتب أمر الطباعة لهذا الأمر سوف يكون.
!#/usr/bin/python3 num = {1, 2, 3, 5, 6, 8, 9} print(num)
و سوف نحصل على النتيجة
{1, 2, 3, 5, 6, 8, 9}
مثال 2
!#/usr/bin/python3 names = {'Muhammad', 'Ahmed', 'Saja'}
أنشأنا لسته set و هي names ووضعنا بها مجموعة بيانات نصية فقط, و عندما نكتب أمر الطباعة لهذا الأمر سوف يكون.
!#/usr/bin/python3 names = {'Muhammad', 'Ahmed', 'Saja'} print(names)
و سوف نحصل على النتيجة
{'Muhammad', 'Ahmed', 'Saja'}
إضافة عنصر جديد في الـ set
!#/usr/bin/python3 names = {'Muhammad', 'Ahmed', 'Saja'}
لإضافة قيمة لهذه المصفوفة نستخدم الدالة add(), سوف نضيف قيمة جديدة لهذه المصفوفة بالشكل
!#/usr/bin/python3 names = {'Muhammad', 'Ahmed', 'Saja'} names.add("muhammal")
عندما نقوم بتنفيذ هذا الكود عن طريق الأمر print
!#/usr/bin/python3 names = {'Muhammad', 'Ahmed', 'Saja'} names.add("muhammal") print(names)
سوف يقوم بإضافة القيمة لنا بشكل عشوائي
{'muhammal', 'Ahmed', 'Muhammad', 'Saja'}
كما لاحظنا لقد قام بإضافة القيمة الجديدة بشكل عشوائي في هذه أللستة.