تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
القوائم lists في بيثون
#1
# القوائم lists في بيثون



القائمة، في بيثون، هي مجموعة عناصر غير متجانسة موضوعة بين قوسين مربعين[] وكل عنصر مفصول عن الذي يليه بالفاصلة الأعجمية(,). مثال:

كود :
my_list =  ["الاثنين" , "الثلاثاء" , "الأربعاء" , 1800 , 20.357 , "الخميس" , "الجمعة"]
يشير المتغير my_list الى قائمة، ولعلك لاحظت أن عناصر القائمة يمكن أن تكون من أنواع مختلفة (غير متجانسة)، ففي القائمة السابقة نجد قيم نصية وقيم رقمية (عدد صحيح وعدد عشري)، لكن يمكن أن تحتوي القائمة على أنواع عديدة أخرى من القيم بما في ذلك قيمة من نوع قائمة. ذلك أن القائمة لا تقوم بتخزين العناصر ذاتها بل فقط مؤشرات نحو تلك العناصر في الذاكرة. نفهم من ذلك أيضا أن حجم القائمة غير مرتبط بحجم العناصر .



نلاحظ أيضا أن القائمة هي نوع من المتتاليات ، اي مجموعة مرتبة من العناصر ، كما هو الحال مع السلاسل النصية مثلا، ويمكن بالتالي الوصول الى أي عنصر في القائمة عبر مؤشر يحدد مكانه بداية من الصفر بالنسبة الى العنصر الاول:

كود :
my_list[0]
my_list[3]
كما يمكن تعديل/ تحرير القائمة بدون الحاجة الى انشاء نسخة منها لعمل ذلك، وذلك على خلاف السلاسل النصية التي لا يمكن تعديلها بدون نسخ:

كود :
print(my_list[3])
my_list[3] = 'رمضان'
print(my_list)
my_text = 'ذي الحجة'
print(my_text[1])
my_text[1] = 'و'        # Error ! لا يمكن تعديل سلسلة نصية
my_text = 'ذو الحجة'    # Correct أصبح المتغير يشير الى سلسلة نصية مختلفة
## الوظيفتان append و del

يمكن حذف أو اضافة عنصر أو أكثر من القائمة:

كود :
print(my_list[4])
del(my_list[4])
print(my_list)
my_list.append('شعبان')
print(my_list)
## الوظيفة extend

استخدمنا الدالة del للحذف والدالة append للاضافة. يمكن اضافة قائمة من عدة عناصر باستخدام extend

كود :
my_list.extend(['السبت', 'الأحد'])
print(my_list)
## الدالة len

لمعرفة عدد عناصر قائمة:

كود :
len(my_list)
وبصفة عامة، جميع العمليات التي يمكن تنفيذها على المتتاليات يمكن عملها على القوائم.



## المساعدة help

لابد من التذكير بطريقة طلب مساعدة سريعة حول مجموعة الوظائف المتوفرة على النوع list

كود :
help(list)
تجاهل في الوقت الحالي الوظائف التي تبدأ وتنتهي بشرطتين سفليتين. لعلك لاحظت أننا تحدثنا باقتضاب عن بعض تلك الوظائف أعلاه: del و append و len و extend



نبدأ بقائمة جديدة كمثال:

كود :
mlist = [0, 1, 2, 3]
print('mlist', mlist)

mlist.append('ap')
print('mlist', mlist)

mlist2 = ['ex1', 'ex2']
mlist.extend(mlist2)
print('mlist', mlist)
كما نلاحظ، تتشابه الوظيفتان append و extend قليلا. النقطة الاهم والتي يجب التذكير بها هي أن القائمة عبارة عن كائن متحول (mutable)، لذا فالوظيفتان السابقتان تعدلان على القائمة نفسها على خلاف عملية الجمع (+) التي تقوم بانشاء كائن جديد. موقع http://pythontutor.com يتيح لنا ملاحظة الفرق تفاعليا. انسخ السطور التالية ونفذها على الموقع لتلاحظ بنفسك:

كود :
a1 = list(range(3))
print(a1)

a2 = list(range(10, 13))
print(a2)

a3 = a1 + a2
print('a1', a1)
print('a2', a2)
print('a3', a3)

e1 = list(range(3))
e2 = list(range(10, 13))
e3 = e1.extend(e2)
ستلاحظ أن عملية الجمع أنشأت قائمة جديدة أما extend فبعد انهاء عملها لم تعط شيئا أو بعبارة أصح أعطت None قيمة المتغير e3

لهذا السبب بالذات، نجد أن عملية الجمع متوفرة لجميع المتتاليات لأنها تعطي متتالية جديدة أما extend فهي ليست متوفرة دائما لأن بعض المتتاليات غير قابلة للتحويل، كما هو الشأن بالنسبة الى المتتالية من نوع سلسلة نصية مثلا



## الوظيفة insert

تقوم هذه الوظيفة بادراج عنصر في مكان محدد بدأ من المؤشر صفر بالنسبة الى العنصر الاول: بعد التذكير بالقائمة التي انشأناها سابقا، سنقوم بادراج عنصر اضافي لها:

كود :
mlist
mlist.insert(2, '1 bis')
print('mlist', mlist)
يمكن الحصول على نفس النتيجة باستخدام تقنية التقطيع/الشرائح slicing
كود :
mlist[5:5] = ['3 bis']
print('mlist', mlist)
## الوظيفة remove

تقوم هذه الوظيفة بحذف الظهور الأول لعنصر مفتش عنه: سنكرر القيمة ap في القائمة ثم نستدعي الوظيفة لنرى ما تفعل

كود :
mlist.append('ap')
mlist
mlist.remove('ap')
print('mlist', mlist)
## الوظيفة pop

نمرر لهذه الوظيفة مؤشرا فتقوم بسحب العنصر الذي يشير اليه المؤشر من القائمة وتقدمه كنتيجة. أذا لم نمرر لها مؤشرا تسحب آخر عنصر. هذه الوظيفة تقوم بمهمتين في نفس الوقت: تسحب العنصر المشار اليه من القائمة وترده لنا (بحيث يمكننا معالجته)

كود :
popped = mlist.pop(0)
print('popped', popped, 'mlist', mlist)

popped = liste.pop()
print('popped', popped, 'liste', liste)
## الوظيفة reverse

هذه الوظيفة كما يوضحه اسمها تقوم بقلب ترتيب عناصر القائمة فيصبح العنصر الاول هو الأخير (اذا نفذتها مرتين على نفس القائمة تعود كما كانت). نفس العملية تقريبا يمكننا الحصول عليها عبر التقطيع/الشرائح slicing.. تقريبا لأن slicing تقوم بعملية نسخ ولا تعدل القائمة الأصلية.

كود :
mlist.reverse()
print('mlist', mlist)

mlist2 = mlist[::-1]
print('mlist2', mlist2)
## الوظيفة sort

تقوم باعادة ترتيب عناصر قائمة تصاعديا او تنازليا مع التنبيه أنها تفعل ذلك على القائمة نفسها بدون نسخة:

كود :
liste = [8, 7, 4, 3, 2, 9, 1, 5, 6]
print('before sort', liste)
liste.sort()
print('after sort', liste)
### الترتيب التنازلي

كود :
liste = [8, 7, 4, 3, 2, 9, 1, 5, 6]
print('before sort', liste)
liste.sort(reverse = True)
print('after sort', liste)
### ترتيب قائمة من السلاسل النصية

يمكن ترتيب قائمة تتكون من سلاسل نصية بالاعتماد على الترتيب الأبجدي كما هو محدد في ترتيب المحارف، لكن مع الاخذ في الاعتبار حالة الحرف (الحرف الكبير > الحرف الصغير)

كود :
list3 = ['spam', 'egg', 'bacon', 'beef']
list3.sort()
print('after sort', list3)
### لكن

كود :
list4 = ['Spam', 'egg', 'bacon', 'Beef']
list4.sort()
print('after sort', list4)
لذلك يتوجب الانتباه لحالة الحرف. كذلك قد نتفاجأ بالنتيجة اذا احتوت عناصر القائمة على فراغات او علامات تنقيط. يوجد طرق أخرى للترتيب عبر التعابير المنتظمة يمكن مراجعتها اذا دعت الضرورة.



## الدالة sorted

اذا كنا نرغب في المحافظة على ترتيب القائمة الاصلية نستخدم الدالة sorted

كود :
list1 = [8, 7, 4, 3, 2, 9, 1, 5, 6]
list2 = sorted(list1)
print ('list1', list1)
print ('list2', list2)
للمزيد من الاطلاع:

https://docs.python.org/3/tutorial/datas...e-on-lists
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف