بيانات التسلسل القائمة list

بيانات التسلسل القائمة list

بيانات التسلسل القائمة list

تابع بيانات التسلسل: تعد القائمة list احد اهم انواع البيانات في لغة البرمجة بايثون ، حيث انها تسمح لنا بالتعامل مع اكثر من عنصر في انً واحد.

القائمة list

يمكن للقائمة ان تحتوي علي مجموعة كبيرة من العناصر مختلفة الانواع جنبا الي جنب ، بحيث تكون كل العناصر بين القوسين المربعين [ ] ، ومفصولة بالفاصلة ( , ).

مثال

mylist = [1, 2, 3]

print(mylist)

يمكن ايضاً الاعلان عن قائمة فارغة واضافة العناصر لها في وقت لاحق من خلال الكلمة append التي تضيف عنصر في اخر القائمة.

مثال

mylist = []

mylist.append(3)
print(mylist)

mylist.append(2)
print(mylist)

mylist.append(1)
print(mylist)

كما تري قمنا بالاعلان عن قائمة فارغة ثم اضفنا لها العناصر ، لاحظ اننا استخدمنا دالة الطباعة لطباعة القائمة في كل مرة نضيف لها عنصر حتي تلاحظ التغيرات.

عناصر قائمة متنوعة

في بايثون اذا كانت كل العناصر من نوع واحد اصبحت مصفوفة ( array ) ، واذا كانت عناصر مختلفة الانواع اصبحت قائمة ( list )؛ لن يختلف هذا بالنسبة لك فقط عليك ان تعرف مصطلح array، list ، وان الـ list اسرع من الـ array.

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]
print( L )

كما تري القائمة السابقة باسم L علي شكل قوسين مربعين [ ] وجميع العناصر مفصولة بفاصلة ( , ) ، وتحتوي علي عناصر من انواع مختلفة كما انها تحتوي علي عنصر قائمة فرعية بداخلها.

في الدرس السابق قمنا بشرح التسلسل النصي وان له طول، وفهرس ( len, index )؛ هذه الصفات موجودة ايضاً في القائمة list[].

الحصول علي طول القائمة len

بما ان القائمة تحتوي علي عناصر متعددة فيجب ان تمتلك صفة الطول ( length ) كما هو الحال مع التسلسل النصي string ، وعلي هذا الاساس للحصول علي عدد العناصر في القائمة نستخدم دالة len().

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]
print( len( L ) )

كما تري تم طباعة رقم 6 وهو عدد عناصر القائمة. في التسلسل النصي الطول هو عدد الحروف في النص، ولكن في تسلسل القائمة الطول هو عدد العناصر بين اقواس القائمة.

فهرس القائمة

يمكن الوصول لاي عنصر في القائمة من خلال رقم الفهرس الخاص به كما كنا نفعل مع التسلسل النصي من خلال كتابة اسم القائمة ثم كتابة رقم الفهرس بين الاقواس المربعة [0] ولاحظ ان الفهرس يبدا من صفر.

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]
print( L[0] )
print( L[1] )
print( L[3] )

كما تلاحظ تم طباعة العنصر الاول، والثاني، والرابع من خلال رقم الفهرس index ، وان كنت لا تعلم فالقائمة السابقة تحتوي علي نوعان من بيانات التسلسل وهما العنصر الثاني والرابع.

وبما ان العنصر من بيانات التسلسل يمكن فهرسته هو ايضاً حتي وان كان عنصر فرعي داخل تفريعة عميقة علي النحو التالي.

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]

print( L[1][0] )
print( L[3][1] )

كما تري تم طباعة العنصر الاول من النص ahmed ، وتم طباعة العنصر الثاني من القائمة [1,2,3] يمكن ان تحتوي القوائم علي قوائم فرعية وهلم جرا.

مثال

L = [1, "ahmed", 1.5, [1,["", 5, ["www", "brmgha", "com"], 16.55],3], True, False]

print( L[3][1][2][1] )

كما تري قمنا بفهرسة قائمة تلو الاخري حتي وصلنا للعنصر المطلوب داخل القائمة الفرعية. هل يمكنك الان فهرسة brmgha وطباعة حرف الـ g فقط .

معكوس القائمة

يمكن ايضا عكس القائمة باستعمال الخطوة [-1] للرجوع للخلف خطوة في كل مره كما فعلنا في بيانات النصوص str.

مثال

L = [1, "ahmed", 1.5, True, False]

print( L[::-1] )

قمنا بشرح [start:stop:step] من قبل في بيانات التسلسل ج1.

قص القائمة

يمكن ايضا قص القائمة واستخراج جزء محدد منها ايضا باستخدام البداية والنهاية [ : ].

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]

print( L[0:3] )

نفس الشيء فقط ادخال البداية والنهاية وسوف يتم قص القائمة، ويمكن عكس الجزء المقصوص من القائمة كالتالي.

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]

print( L[0:3][::-1] )

في قوس البداية الاول حددنا الجزء المطلوب من القائمة ثم في القوس الثاني فقط ادخلنا الخطوة step تساوي -1 لعكس القائمة الصغيرة .

البحث عن عنصر وارجاع رقم الفهرس

في بعض الاحيان قد تحتاج الي معرفة رقم فهرس عنصر محدد وذلك من خلال الصفة index.

مثال

L = [1, "ahmed", 1.5, [1,2,3], True, False]

print( L.index("ahmed") )

النتيجة هي رقم فهرس 1 لان الفهرس يبدا من صفر كما ذكرنا سابقاً. يمكن ايضاً البحث عن اي نوع من الانواع المختلفة داخل القائمة.

مثال

L = [True, "ahmed", 0, 1, [1,2,3], True, False]

print( L.index( "ahmed" ) )
print( L.index( 1 ) )
print( L.index( 0 ) )
print( L.index( [1, 2, 3] ) )
print( L.index( True ) )
print( L.index( False ) )

ان كنت شديد الملاحظة سوف تلاحظ ان 1 و True هما نفس القيمة، و 0 و False ايضاً نفس القيمة لذلك تم طباعة رقم فهرس 0 عند البحث عن رقم 1 ، نفس الشيء عند البحث عن True سوف يتم البحث عن اول 0 او True ويتم ارجاع رقم فهرسة.

حذف عناصر القائمة

يمكنك دائما حذف وتعديل عناصر القائمة وهناك اكثر من اسلوب لفعل ذلك ، ولكن سوف نستعمل الحذف من خلال رقم الفهرس ليكون مثال علي استخدام رقم الفهرس في بعض العمليات.

NAMES = ["mohamed", "ahmed", "saad", "salah", "gamal", "tia", "ezz"]
print("List before delete element: {}".format(NAMES))
name = input("name to remove: ")
x = NAMES.index( name )
print("{} exists on index [{}]".format(name, x))
del NAMES[ x ]

print("{} removed from list: {}".format(name, NAMES))

اضغط زر التشغيل واكتب اسم من القائمة داخل حقل الادخال واضغط enter ، ويمكنك اعادة التشغيل والتجربة مع اسم اخر.

في المثال السابق قائمة باسم NAMES بها مجموعة من العناصر النصية str ، قمنا ايضا باستخدام اسلوب تنسيق النصوص في الطباعة.

وفي السطر الثالث استعملنا دالة input للحصول علي المدخلات من المستخدم مثل ما شاهدت اثناء تشغيلك للمثال السابق.

ثم حصلنا علي رقم فهرس الاسم الذي ادخلته في حقل الادخال بواسطة index ، والحذف باستعمال del ورقم الفهرس.

حذف مجموعة عناصر

يمكن ايضا حذف مجموعة عناصر باستعمال فهرس البداية والنهاية.

مثال

NAMES = ["mohamed", "ahmed", "saad", "salah", "gamal", "tia", "ezz"]

print("List before delete element: {}".format(NAMES))

del NAMES[0:3]

print("new list: {}".format(NAMES))

قمنا بحذف من الفهرس 0 الي الفهرس 3 و فهرس 3 ليس مشمول في الحذف.

جمع القوائم

يمكن استخدام معامل الجمع ( + ) لجمع اكثر من قائمة معاً.

مثال

x = [0, 0, 0]
y = [1, 1, 1, 1]
z = x + y
print(z)

كما تلاحظ اصبح متغير z يحتوي علي القائمة الاولي + القائمة الثانية.

قص وجمع قائمتين

في البرمجه يمكن فعل اي شىء بالبيانات طالما تعرف كيف تفعل ذلك ، حتي الان لا هدف مما سنقوم به ولكن قد تحتاجة في بعض المهام.

مثال

x = [0, 0, 0, 0]
y = [1, 1, 1, 1]
z = x[ : 2 ] + y[ : 2 ] + x[ 2 : ] + y[ 2 : ]
print(z)

 

مضاعفة القائمة

يمكن ايضاً استخدام معامل الضرب ( * ) لمضاعفة القائمة.

مثال

x = [0, 1, 2]
z = x * 5
print(z)

والنتيجة هي تكرار القائمة داخل نفسها خمسة مرات متتالية.

قص دمج مضاعفة قائمة

x = [0, 0, 0, 0]
y = [1, 1, 1, 1]
z = ( x[ : 2 ] + y[ : 2 ] + x[ 2 : ] + y[ 2 : ]  ) * 5
print(z)

في المثال السابق قسمنا العمليات الحسابية بواسطة الاقواس ( ) حتي يتم مضاعفة كل ما بداخل القوس.

مشاكل واخطاء

مشكلة في رقم الفهرس وتكون بسبب عدم وجود الرقم المطلوب في القائمة ويكون كالتالي:

 IndexError: list index out of range on line 3 

مشكلة دعم الفهرسة وتكون بسبب ان البيانات المراد فهرستها ليست من نوع بيانات التسلسل وهو كالتالي:

 TypeError: 'int' does not support indexing on line 3 

 

الحديث عن القوائم يحتاج قسم كامل لذلك سوف نتوقف هنا ونخصص لها قسم القوائم.

الاختبار

تعودنا ان نجعل الاختبار يشمل الدروس السابقة لذلك سوف نجمع بين الدوال والقوائم.

داخل المحرر التالي تجد دالة باسم mapit و تمتلك عاملان هما:

  • names - قائمة (list) مكونة من مجموعة من العناصر.
  • name - اسم (str) العنصر المراد حذفة من القائمة names.

استخدم الاسم الموجود في عامل name لحذف العنصر من القائمة names وارجع القائمة الجديدة.

قيمة name و names تضاف تلقائي فقط استخدمهم.

مثال

اذا كان names يساوي [1,2,3] و name يساوي 2 يجب ان ترجع [1,3].

ان كنت لا تعلم كيفية ارجاع البيانات من الدوال راجع درس مقدمة عن الدوال.

حلول الاعضاء
فتح الحلول مقابل 5
مقفل
output
terminal

Next

التعليقات

no comments found.
  • من خلال الضغط علي زر {;} في شريط الادوات يمكنك اضافة اكواد بايثون الي التعليق للتجربة اون لاين.
  • برجاء مراعاة قواعد الكتابة، والادب.