12-05-2018, 08:11 PM
# القوائم lists في بيثون
القائمة، في بيثون، هي مجموعة عناصر غير متجانسة موضوعة بين قوسين مربعين[] وكل عنصر مفصول عن الذي يليه بالفاصلة الأعجمية(,). مثال:
كود :
my_list = ["الاثنين" , "الثلاثاء" , "الأربعاء" , 1800 , 20.357 , "الخميس" , "الجمعة"]
نلاحظ أيضا أن القائمة هي نوع من المتتاليات ، اي مجموعة مرتبة من العناصر ، كما هو الحال مع السلاسل النصية مثلا، ويمكن بالتالي الوصول الى أي عنصر في القائمة عبر مؤشر يحدد مكانه بداية من الصفر بالنسبة الى العنصر الاول:
كود :
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 أصبح المتغير يشير الى سلسلة نصية مختلفة
يمكن حذف أو اضافة عنصر أو أكثر من القائمة:
كود :
print(my_list[4])
del(my_list[4])
print(my_list)
my_list.append('شعبان')
print(my_list)
استخدمنا الدالة del للحذف والدالة append للاضافة. يمكن اضافة قائمة من عدة عناصر باستخدام extend
كود :
my_list.extend(['السبت', 'الأحد'])
print(my_list)
لمعرفة عدد عناصر قائمة:
كود :
len(my_list)
## المساعدة help
لابد من التذكير بطريقة طلب مساعدة سريعة حول مجموعة الوظائف المتوفرة على النوع list
كود :
help(list)
نبدأ بقائمة جديدة كمثال:
كود :
mlist = [0, 1, 2, 3]
print('mlist', mlist)
mlist.append('ap')
print('mlist', mlist)
mlist2 = ['ex1', 'ex2']
mlist.extend(mlist2)
print('mlist', mlist)
كود :
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 فهي ليست متوفرة دائما لأن بعض المتتاليات غير قابلة للتحويل، كما هو الشأن بالنسبة الى المتتالية من نوع سلسلة نصية مثلا
## الوظيفة insert
تقوم هذه الوظيفة بادراج عنصر في مكان محدد بدأ من المؤشر صفر بالنسبة الى العنصر الاول: بعد التذكير بالقائمة التي انشأناها سابقا، سنقوم بادراج عنصر اضافي لها:
كود :
mlist
mlist.insert(2, '1 bis')
print('mlist', mlist)
كود :
mlist[5:5] = ['3 bis']
print('mlist', mlist)
تقوم هذه الوظيفة بحذف الظهور الأول لعنصر مفتش عنه: سنكرر القيمة ap في القائمة ثم نستدعي الوظيفة لنرى ما تفعل
كود :
mlist.append('ap')
mlist
mlist.remove('ap')
print('mlist', mlist)
نمرر لهذه الوظيفة مؤشرا فتقوم بسحب العنصر الذي يشير اليه المؤشر من القائمة وتقدمه كنتيجة. أذا لم نمرر لها مؤشرا تسحب آخر عنصر. هذه الوظيفة تقوم بمهمتين في نفس الوقت: تسحب العنصر المشار اليه من القائمة وترده لنا (بحيث يمكننا معالجته)
كود :
popped = mlist.pop(0)
print('popped', popped, 'mlist', mlist)
popped = liste.pop()
print('popped', popped, 'liste', liste)
هذه الوظيفة كما يوضحه اسمها تقوم بقلب ترتيب عناصر القائمة فيصبح العنصر الاول هو الأخير (اذا نفذتها مرتين على نفس القائمة تعود كما كانت). نفس العملية تقريبا يمكننا الحصول عليها عبر التقطيع/الشرائح slicing.. تقريبا لأن slicing تقوم بعملية نسخ ولا تعدل القائمة الأصلية.
كود :
mlist.reverse()
print('mlist', mlist)
mlist2 = mlist[::-1]
print('mlist2', mlist2)
تقوم باعادة ترتيب عناصر قائمة تصاعديا او تنازليا مع التنبيه أنها تفعل ذلك على القائمة نفسها بدون نسخة:
كود :
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