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]
.