ملتقى الواحــة
المتتاليات sequences - نسخة قابلة للطباعة

+- ملتقى الواحــة (https://forums.wahaproject.org)
+-- قسم : واحــة لينكس (https://forums.wahaproject.org/forum-3.html)
+--- قسم : البرمجة (https://forums.wahaproject.org/forum-9.html)
+--- الموضوع : المتتاليات sequences (/thread-86.html)



المتتاليات sequences - محمد - 11-05-2018

# المتتاليات sequences



هي أساسا مجموعة الانواع types التالية: list - tuple - str - bytes لكنها تجمع أنواع أخرى غير هذه.

تعريفها: المتتاليات هي مجموعة محددة ومرتبة من العناصر المؤشرة من صفر الى ن - 1 إذا كان عدد العناصر يساوي ن.

نبدأ بمتتالية تمثل سلسلة نصية str:

كود :
s = 'egg, bacon'
يمكن الوصول الى كل عنصر على حده:

كود :
s[0]        # أول عنصر
s[9]        # آخر عنصر
لتحديد عدد عناصر المتتالية نستخدم الدالة len

كود :
len(s)
يمكن التحقق من عضوية عنصر الى المتتالية بطريقة قريبة من اللغة الطبيعية عبر:

كود :
'egg' in s
'egg' not in s
يمكن تجميع (concatenate) متتاليات (من نفس النوع، انظر الانواع أعلاه) بطريقة سهلة كما لو أنها عملية جمع: سينتج عن ذلك متتالية جديدة من نفس النوع. في المثال التالي لن تتغير قيمة المتغير s (الذي هو اصلا متتالية من النوع النصي غير القابل للتعديل بدون نسخ) لكن سنحصل على متتالية جديدة اذا اردنا حفظها فلابد من ربطها بمتغير s2 مثلا:

كود :
s + ' and beans'
هناك عدة عمليات أخرى يمكن تنفيذها على المتتاليات، على سبيل المثال:

- تحديد مؤشر اول ظهور لعنصر في المتتالية (تنبيه: index ترجع خطأ اذا لم تجد ما تبحث عنه)

كود :
s.index('g')
s.index('x')      # Error !
- حساب عدد المرات التي يتكرر فيها عنصر

كود :
s.count('g')
- الدالتان min و max لتحديد أصغر أو أكبر عنصر:

كود :
min(s)
max(s)
-يمكن تنفيذ عملية نسخ (shallow copy) عبر عملية الضرب (من المهم مزيد البحث عن الفرق بين shallow copy و deep copy)

كود :
s * 2
'x' * 30


## التقطيع/الشرائح: slicing

هذه العملية هامة جدا ومستخدمة بكثرة في بيثون، وهي ترد الينا متتالية جديدة من نفس النوع (ما يحدث هو عملية نسخ shallow copy). الحد الايسر مضمّن دائما والحد الايمن مستثنى دائما: اقرأها رياضيا هكذا دائما
كود :
s[ a:b [

### أمثلة

كود :
s = 'egg, bacon'
s[0:3]
s[:3]
s[5:10]
s[5:]
s[:]
العملية الاخيرة هي عملية نسخ سطحي (shallow copy) للمتتالية.

### مزيد من الامثلة عبر اضافة عدد الخطوات

كود :
s[0:10:2]
s[::2]
s[:8:3]
s[2::3]
s[100:200]
هذا المثال الاخير غريب نوعا ما، فالمتتالية s لا تحتوي على مؤشرات لـ 100 عنصر ورغم ذلك لم ترد الينا خطأ، بل فقط متتالية فارغة من نفس نوع المتتالية الاصلية: هنا ردت الينا سلسلة نصية فارغة لأن المتتالية s من نوع سلسلة نصية، في المثال التالي لدينا متتالية من نوع قائمة (المتغير من نوع قائمة يقبل عناصر من انواع غير متجانسة وحتى تعبير برمجي او دالة أخرى كما هو الحال مع آخر ثلاثة عناصر فيها)

كود :
mlist = [1, 2, 'a', 'bug', 12.5, {'January':31, 'February':28, 'March':31, 'April':30}, ('fname', 'lname', 'ntel'), s, set(s), [c for c in 'Hello']]
mlist
mlist[0:3]
mlist[:3]
mlist[5:10]
mlist[5:]
mlist[:]
### تنبيه: هذه الأخيرة تقوم بنسخ سطحي فقط للقائمة...

كود :
mlist[0:10:2]
mlist[::2]
mlist[:8:3]
mlist[2::3]
mlist[5:100]


### لنتحدث عن المؤشرات السالبة



كود :
s[-10: -7]
المؤشرات السالبة هي كالموجبة غير أنها تبدأ من آخر المتتالية: في المثال طلبنا نسخة من العناصر انطلاقا من -10 مضمّنة الى -7 مستثناة

(-1 هو آخر عنصر في المتتالية لعرضه نستخدم الطريقة التالية)

كود :
s[-10:]
المؤشرات السالبة لا تعني تصفح المتتالية من آخرها الى اولها: التصفح يتم دائما من اول المتتالية الى آخرها (أي من اليسار الى اليمين)، وبذلك يكون العنصر صاحب المؤشر 0 هو نفسه العنصر ذو المؤشر -len()

كود :
s[-len(s):]
s[:len(s)]
s[:-3]
الآن اذا رغبنا في نسخة مقلوبة من المتتالية (أو جزء منها) نستخدم عدد خطوات سلبي لكي نتنقل من اليمين الى اليسار:

كود :
s[::-1]
s[2:0:-1]
انتبه الى أننا هذه المرة نستثني العنصر صفر، فاذا اردناه ضمن النسخة الجزئية المقلوبة نختار خطوات سلبية بداية من المؤشر 2 الى البداية هكذا :

كود :
s[2::-1]