السؤال الشائع بين العديد من المبتدئين ماهو الفرق بين القوائم والصفوف ؟
في الحقيقة هناك إثنين من الإختلافات المختلفة إختلافات تقنية وإختلافات ثقافية ، مع وجود أيضا أوجه تشابه بالطبع .
تعتبر كل من القوائم والصفوف عبارة عن حاويات، سلسلة من الكائنات :
>>> my_list = [1, 2, 3] >>> type(my_list) <class 'list'> >>> my_tuple = (1, 2, 3) >>> type(my_tuple) <class 'tuple'>
كل منهم يستطيع التعامل مع مختلف أنواع البيانات وكلا منها يستطيع الحفاظ على ترتيب العناصر .
نعود الأن لأوجه الإختلاف ونبدأ مع الإختلافات التقنية وأولها هي أن القوائم قابلة للتغيير على عكس الصفوف التي لا تقبل التغييرات وهذا هو الفرق الجوهري الموجود بينها في لغة بايثون .
>>> my_list[1] = "two" >>> my_list [1, 'two', 3] >>> my_tuple[1] = "two" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
وهذا هو أيضا الفرق التقني الوحيد بين القوائم والصفوف والذي يتجلى في العديد من الطرق وعلى سبيل المثال فإن القوائم لديها طريقة .append() لإضافة عناصر أخرى إلى القائمة بينما لا تمتلكها الصفوف
>>> my_list.append("four") >>> my_list [1, 'two', 3, 'four'] >>> my_tuple.append("four") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append'
الصفوف لا تمتلك طريقة ()append. لإنها غير قابلة للتغيير .
نأتي الأن إلى الإختلافات الثقافية وهي حول كيفية إستخدام القوائم والصفوف في الواقع ، حيث نقوم بإستخدام القوائم عندما يكون لدينا سلسلة متجانسة من طول غير معروف أما الصفوف نستعملها عندما نكون على علم بعدد العناصر مسبقا لأن موضع العناصر يكون مهما لغويا.
على سبيل المثال دعونا نفترض أنك تملك دالة تقوم بالبحث عن الملفات في دليل ما عن الملفات التي تنتهي بصيغة py. مثلا ،وسيكون الناتج عبارة عن قائمة لأنك لا تعرف عدد الملفات التي سيتم إيجادها كما أن معظم عناصر القائمة عبارة عن نفس الشيء (ملفات بايثون).
>>> find_files("*.py") ["control.py", "config.py", "cmdline.py", "backward.py"]
من جهة أخرى دعونا نقول أننا نريد تخزين خمسة قيم تمثل موقع محطات مراقبة الطقس : الهوية، المدينة، الدولة، خط العرض، خط الطول، وطبعا المصفوفة الإختيار الصحيح في هذه الحالة .
>>> tiaret = (14, "Tiaret", "DZ", 40, 105) >>> tiaret[1] 'tiaret'
في معظم الحالات عليك دائما الإختيار بين القوائم أو الصفوف إستنادا على الإختلاف الثقافي ، إفهم جيدا ماذا تعني بياناتك فإذا كانت يمكن أن تكون بيانات ذات عناصر طويلة ويمكن أن تزداد مع الوقت فالحل هنا طبعا يتمثل في القوائم وعندما تقوم بكتابة كود تكون على دراية تامة ماهو العنصر الثالث فعليك بالصفوف .
وأخير يبقى الجواب على السؤال المطروح أول التدوينة غامض وليس الجواب دائما بهذه البساطة