5.3. الصفوف والمتتاليات #
لاحظنا أن القوائم والسلاسل النصية تشترك في العديد من الخصائص، مثل عمليات الفهرسة والتقطيع. هما مثالان على أنواع بيانات التسلسل (انظر أنواع التسلسل – القائمة، المجموعة، النطاق). بما أن بايثون لغة برمجة، في ظل تطور اللغة، يمكن إضافة أنواع بيانات تسلسلية أخرى. هناك أيضًا نوع بيانات تسلسلي قياسي آخر: المجموعة.
تتكون المجموعة من عدد من القيم مفصولة بفواصل، على سبيل المثال:
>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
كما ترى، تُحاط عناصر الإخراج دائمًا بأقواس، وذلك لتفسير العناصر المتداخلة بشكل صحيح؛ ويمكن إدخالها مع أو بدون أقواس محيطة، مع أن الأقواس غالبًا ما تكون ضرورية (إذا كانت المجموعة جزءًا من تعبير أكبر). لا يمكن تعيين عناصر فردية للمجموعة، ولكن من الممكن إنشاء مجموعات تحتوي على كائنات قابلة للتغيير، مثل القوائم.
على الرغم من أن المجموعات قد تبدو مشابهة للقوائم، إلا أنها تُستخدم غالبًا في مواقف مختلفة ولأغراض مختلفة. المجموعات ثابتة، وعادةً ما تحتوي على تسلسل غير متجانس من العناصر التي يمكن الوصول إليها عن طريق فك الضغط (انظر لاحقًا في هذا القسم) أو الفهرسة (أو حتى عن طريق السمة في حالة المجموعات المسماة). القوائم قابلة للتغيير، وعادةً ما تكون عناصرها متجانسة، ويمكن الوصول إليها عن طريق التكرار عبر القائمة.
هناك مشكلة خاصة تتمثل في بناء التوبلات التي تحتوي على 0 أو 1 عنصر: تحتوي الصيغة على بعض الميزات الإضافية لاستيعابها. تُبنى التوبلات الفارغة باستخدام زوج فارغ من الأقواس؛ وتُبنى التوبلات التي تحتوي على عنصر واحد بوضع فاصلة بعد القيمة (لا يكفي وضع قيمة واحدة بين قوسين). قد يبدو هذا الأسلوب غير عملي، ولكنه فعال. على سبيل المثال:
>>> empty = ()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
تُعد العبارة t = 12345، 54321، ‘hello!’ مثالاً على تجميع التوبلات: القيم 12345، 54321، و’hello!’ مُجمّعة معًا في توبل. العملية العكسية ممكنة أيضًا:
>>> x, y, z = t
يُسمى هذا، وهو مناسب تمامًا، فك ضغط التسلسل، وهو يعمل مع أي تسلسل على الجانب الأيمن. يتطلب فك ضغط التسلسل أن يكون عدد المتغيرات على الجانب الأيسر من علامة التساوي مساويًا لعدد عناصر التسلسل. تجدر الإشارة إلى أن التعيين المتعدد هو في الواقع مزيج من حزم التوبلات وفك ضغط التسلسل.