تقييم الموضوع :
- 0 أصوات - بمعدل 0
- 1
- 2
- 3
- 4
- 5
المتتاليات sequences
|
المشاركات : 30
المواضيع 25
الإنتساب : Apr 2018
السمعة :
11
11-05-2018, 11:06 PM
(آخر تعديل لهذه المشاركة : 11-05-2018, 11:12 PM {2} بواسطة محمد.)
# المتتاليات sequences
هي أساسا مجموعة الانواع types التالية: list - tuple - str - bytes لكنها تجمع أنواع أخرى غير هذه.
تعريفها: المتتاليات هي مجموعة محددة ومرتبة من العناصر المؤشرة من صفر الى ن - 1 إذا كان عدد العناصر يساوي ن.
نبدأ بمتتالية تمثل سلسلة نصية str:
يمكن الوصول الى كل عنصر على حده:
كود : s[0] # أول عنصر
s[9] # آخر عنصر
لتحديد عدد عناصر المتتالية نستخدم الدالة len
يمكن التحقق من عضوية عنصر الى المتتالية بطريقة قريبة من اللغة الطبيعية عبر:
كود : 'egg' in s
'egg' not in s
يمكن تجميع (concatenate) متتاليات (من نفس النوع، انظر الانواع أعلاه) بطريقة سهلة كما لو أنها عملية جمع: سينتج عن ذلك متتالية جديدة من نفس النوع. في المثال التالي لن تتغير قيمة المتغير s (الذي هو اصلا متتالية من النوع النصي غير القابل للتعديل بدون نسخ) لكن سنحصل على متتالية جديدة اذا اردنا حفظها فلابد من ربطها بمتغير s2 مثلا:
هناك عدة عمليات أخرى يمكن تنفيذها على المتتاليات، على سبيل المثال:
- تحديد مؤشر اول ظهور لعنصر في المتتالية (تنبيه: index ترجع خطأ اذا لم تجد ما تبحث عنه)
كود : s.index('g')
s.index('x') # Error !
- حساب عدد المرات التي يتكرر فيها عنصر
- الدالتان min و max لتحديد أصغر أو أكبر عنصر:
-يمكن تنفيذ عملية نسخ (shallow copy) عبر عملية الضرب (من المهم مزيد البحث عن الفرق بين shallow copy و deep copy)
## التقطيع/الشرائح: slicing
هذه العملية هامة جدا ومستخدمة بكثرة في بيثون، وهي ترد الينا متتالية جديدة من نفس النوع (ما يحدث هو عملية نسخ shallow copy). الحد الايسر مضمّن دائما والحد الايمن مستثنى دائما: اقرأها رياضيا هكذا دائما
### أمثلة
كود : 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]
### لنتحدث عن المؤشرات السالبة
المؤشرات السالبة هي كالموجبة غير أنها تبدأ من آخر المتتالية: في المثال طلبنا نسخة من العناصر انطلاقا من -10 مضمّنة الى -7 مستثناة
(-1 هو آخر عنصر في المتتالية لعرضه نستخدم الطريقة التالية)
المؤشرات السالبة لا تعني تصفح المتتالية من آخرها الى اولها: التصفح يتم دائما من اول المتتالية الى آخرها (أي من اليسار الى اليمين)، وبذلك يكون العنصر صاحب المؤشر 0 هو نفسه العنصر ذو المؤشر -len()
كود : s[-len(s):]
s[:len(s)]
s[:-3]
الآن اذا رغبنا في نسخة مقلوبة من المتتالية (أو جزء منها) نستخدم عدد خطوات سلبي لكي نتنقل من اليمين الى اليسار:
انتبه الى أننا هذه المرة نستثني العنصر صفر، فاذا اردناه ضمن النسخة الجزئية المقلوبة نختار خطوات سلبية بداية من المؤشر 2 الى البداية هكذا :
|
الردود في هذا الموضوع |
المتتاليات sequences - بواسطة محمد - 11-05-2018, 11:06 PM
|
مستخدمين يتصفحوا هذا الموضوع: 2 ضيف