Lesson 5
سلاسل
1. سلاسل
يمكن قراءة السلسلة من الإدخال القياسي باستخدام الدالة input() أو تعريفها في علامات اقتباس مفردة أو مزدوجة. يمكن أن تكون السلسلتين متسلسلتين ، ويمكننا أيضًا تكرار سلسلة n من الأزمنة بضربه عددًا صحيحًا:
print('>_< ' * 5) # > _ <> _ <> _ <> _ <> _ <
سلسلة في Python هي سلسلة من الأحرف. تقوم الدالة len(some_string) بإرجاع عدد الأحرف الموجودة في سلسلة:
print(len('abcdefghijklmnopqrstuvwxyz')) # 26
يمكن تحويل كل كائن في Python إلى سلسلة باستخدام str(some_object) الدالة str(some_object) . حتى نتمكن من تحويل الأرقام إلى سلاسل:
s = str(2 ** 100) print(s) # 1267650600228229401496703205376 print(len(s)) # 31
2. شرائح: حرف واحد
تعطي شريحة من السلسلة المعطاة حرفًا واحدًا أو جزءًا معينًا: السلسلة الفرعية أو اللاحقة.
هناك ثلاثة أشكال للشرائح. أبسط شكل من أشكال شريحة: شريحة ذات طابع واحد S[i] يعطي i حرف من سلسلة ال. نحسب الأحرف بدءًا من 0. وهذا يعني ، إذا كانت و و و و ، . لاحظ أنه في Python لا يوجد نوع منفصل لأحرف السلسلة. S[i] أيضاً str نوع ، تماماً مثل السلسلة المصدر.
يسمى الرقم i في S[i] فهرس .
إذا حددت فهرسًا سالبًا ، فسيتم حسابه من النهاية ، بدءًا بالرقم -1 . وهذا يعني ، ، ، ، ، .
دعونا نلخصها في الجدول:
| سلاسل | H | البريد | ل | ل | س |
|---|---|---|---|---|---|
| فهرس | S [0] | S [1] | S [2] | S [3] | 4 س] |
| فهرس | S [-5] | 4 س] | S [-3] | S [-2] | S [-1] |
إذا كان الفهرس في الشريحة S[i] أكبر من أو يساوي len(S) ، أو أقل من -len(S) ، يحدث الخطأ التالي IndexError: string index out of range .
3. شرائح: سلسلة فرعية
الشريحة ذات معلمتين S[a:b] بارجاع السلسلة الفرعية للطول b - a ، بدءا من الحرف في الفهرس a ودائم حتى الحرف في index b ، لا بما في ذلك الحرف الأخير. على سبيل المثال ، S[1:4] == 'ell' ، ويمكنك الحصول على نفس السلسلة الفرعية باستخدام S[-4:-1] . يمكنك مزج فهارس موجبة وسالبة في الشريحة نفسها ، على سبيل المثال ، S[1:-1] هي سلسلة فرعية بدون الحرف الأول والأخير من السلسلة (تبدأ الشريحة بالحرف مع الفهرس 1 وتنتهي بفهرس من -1 ، وليس بما في ذلك).
الشرائح مع معلمتين أبداً لا تتسبب في IndexError . على سبيل المثال ، بالنسبة إلى S == 'Hello' ، ترجع الشريحة S[1:5] السلسلة 'ello' ، والنتيجة هي نفسها حتى إذا كان الفهرس الثاني كبيرًا جدًا ، مثل S[1:100] .
إذا حذفت المعلمة الثانية (لكن احتفظت بنقطتين) ، فستنتقل الشريحة إلى نهاية السلسلة. على سبيل المثال ، لإزالة الحرف الأول من السلسلة (مؤشره هو 0) تأخذ الشريحة S[1:] . وبالمثل ، إذا حذفت المعلمة الأولى ، فستأخذ Python الشريحة من بداية السلسلة. بمعنى ، لإزالة آخر حرف من السلسلة ، يمكنك استخدام الشريحة S[:-1] . الشريحة S[:] تطابق السلسلة S نفسها.
4. شرائح: ثبات السلاسل
أي شريحة من سلسلة يخلق سلسلة جديدة وأبدا تعديل النسخة الأصلية. في بايثون سلاسل غير قابلة للتغيير ، أي أنها لا يمكن تغييرها ككائنات. يمكنك فقط تعيين المتغير إلى السلسلة الجديدة ، ولكن يبقى القديم في الذاكرة.
في الواقع في بايثون لا توجد متغيرات. لا يوجد سوى الأسماء المرتبطة بأي كائنات. يمكنك أولاً ربط اسم بجسم واحد ، ثم مع آخر. هل يمكن ربط عدة أسماء بواحد ونفس الشيء.
دعنا نثبت ذلك:
s = 'Hello' t = s # s و t أشر إلى نفس السلسلة t = s[2:4] # الآن ر يشير إلى السلسلة الجديدة "ليرة لبنانية" print(s) # مطبوعات "مرحبا" كما لا يتم تغيير الصورة print(t) # يطبع 'ليرة لبنانية'
5. شرائح: لاحق
إذا قمت بتحديد شريحة ذات ثلاثة معلمات S[a:b:d] ، تحدد المعلمة الثالثة الخطوة ، كما هي بالنسبة range() الوظيفة range() . في هذه الحالة فقط يتم أخذ الأحرف مع الفهرس التالي: a a + d ، a + 2 * d وهكذا ، حتى لا بما في ذلك الحرف مع فهرس b . إذا كانت المعلمة الثالثة تساوي 2 ، تأخذ الشريحة كل حرف ثاني ، وإذا كانت خطوة الشريحة تساوي -1 ، -1 الحروف بترتيب عكسي. على سبيل المثال ، يمكنك عكس سلسلة مثل هذه: S[::-1] . دعونا نرى الأمثلة:
s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])
range() الدوال range() :s = 'abcdefghijklm'
print(s[0:10:2])
for i in range(0, 10, 2):
print(i, s[i])
6. طرق السلسلة: find () و rfind ()
الطريقة هي دالة مرتبطة بالكائن. عندما يتم استدعاء الطريقة ، يتم تطبيق الأسلوب على الكائن ويقوم ببعض الحسابات المتعلقة به. يتم استدعاء أساليب كـ object_name.method_name(arguments) . على سبيل المثال ، في s.find("e") يتم تطبيق أسلوب السلسلة find() على السلسلة s بوسيطة واحدة "e" .
find() أسلوب find() عن سلسلة فرعية ، يتم تمريرها كوسيطة ، داخل السلسلة التي تسمى بها. ترجع الدالة فهرس التواجد الأول من السلسلة الفرعية. إذا لم يتم العثور على السلسلة الفرعية ، ترجع الطريقة -1.
s = 'Hello'
print(s.find('e'))
# 1
print(s.find('ll'))
# 2
print(s.find('L'))
# -1
وبالمثل ، rfind() فهرس التواجد الأخير من السلسلة الفرعية.
s = 'abracadabra'
print(s.find('b'))
# 1
print(s.rfind('b'))
# 8
إذا قمت باستدعاء find() بثلاث وسيطات s.find(substring, left, right) ، يتم إجراء البحث داخل الشريحة s[left:right] . إذا قمت بتحديد اثنين فقط من الحجج، مثل s.find(substring, left) ، يتم تنفيذ البحث في شريحة s[left:] ، وهذا هو، بدءا من الحرف في مؤشر left إلى نهاية السلسلة. الأسلوب s.find(substring, left, right) يُرجع الفهرس المطلق ، نسبياً إلى السلسلة بأكملها s ، وليس إلى الشريحة.
s = 'my name is bond, james bond, okay?'
print(s.find('bond'))
# 11
print(s.find('bond', 12))
# 23
7. طرق السلسلة: استبدال ()
replace() الأسلوب replace() يستبدل كافة تكرارات سلسلة فرعية مع أخرى. بناء الجملة: s.replace(old, new) السلسلة S ويستبدل كل تكرارات السلسلة الفرعية old بالسلسلة الفرعية new . مثال:
print('a bar is a bar, essentially'.replace('bar', 'pub'))
# "الحانة هي حانة ، بشكل أساسي"
يمكن للمرء أن يجتاز count الوسيطة الثالث ، مثل هذا: s.replace(old, new, count) . فإنه يجعل replace() ليحل محل فقط count التكرارات الأولى ثم يتوقف.
print('a bar is a bar, essentially'.replace('bar', 'pub', 1))
# "الحانة هي حانة ، بشكل أساسي"
8. طرق السلسلة: العد ()
تحسب هذه الطريقة عدد مرات ظهور سلسلة واحدة داخل سلسلة أخرى. أبسط شكل هو هذا واحد: s.count(substring) . تؤخذ فقط الأحداث غير المتداخلة في الاعتبار:
print('Abracadabra'.count('a'))
# 4
print(('aaaaaaaaaa').count('aa'))
# 5
إذا قمت بتحديد ثلاث معلمات ، يتم تنفيذ العد داخل الشريحة s[left:right] .