برامج بايثون في عمليات السلسلة
نشرت: 2022-04-26في هذا البرنامج التعليمي ، ستكتب برامج Python لحل الأسئلة الشائعة حول عمليات السلسلة .
ستتعلم كيفية التحقق مما إذا كانت سلاسل Python متجانسة وجناسًا في حالة العنوان .
سلاسل بايثون: مراجعة سريعة
في Python ، تعتبر السلاسل أنواع بيانات مضمنة قوية. يمكنهم تخزين سلسلة من الشخصيات.
الفهرسة في سلاسل Python: مثل جميع متغيرات Python ، يتم أيضًا فهرسة السلاسل الصفرية. إذن ، المؤشرات الصالحة لسلسلة طولها N هي 0 ، 1 ، 2 حتى N - 1.
تدعم Python أيضًا الفهرسة السلبية للوصول إلى العناصر من نهاية السلسلة. إذن -1 هو فهرس آخر حرف في السلسلة ، و -2 هو فهرس الحرف الثاني إلى الأخير في السلسلة ، وهكذا.
ثبات سلاسل Python : بالإضافة إلى ذلك ، فإن السلاسل في Python غير قابلة للتغيير ، لذلك لا يمكنك تعديلها في مكانها. ومع ذلك ، يمكنك استدعاء عدة طرق سلسلة عليها والحصول على نسخ من السلاسل مع النتيجة المرجوة.
الآن بعد أن قمنا بمراجعة أساسيات سلاسل Python ، فلننتقل إلى حل بعض المشكلات البسيطة والمثيرة للاهتمام.
لنبدأ.
تحقق مما إذا كانت Python String هي Palindrome
المشكلة : بالنظر إلى سلسلة Python ، تحقق مما إذا كانت متناظرة أم لا.
إذا كانت الإجابة بنعم ، فارجع إلى True ؛ وإلا ، فارجع إلى False.
لذا فإن مشكلتنا الأولى هي التحقق مما إذا كانت سلسلة نصية معينة متطابقة أم لا.
المتناظرة هي سلسلة تقرأ نفس الشيء من اليسار إلى اليمين وكذلك من اليمين إلى اليسار. دعنا نسرد بعض الأمثلة: سيارة السباق ، والإحالة ، والمستوى ، والسيدة ، والرادار ، وما إلى ذلك.
فيما يلي خطوات حل هذه المشكلة:
- الحصول على نسخة معكوسة من السلسلة وتخزينها في متغير آخر ، إذا لزم الأمر.
- قارن بين قيم السلسلة الأصلية والسلسلة المعكوسة.
- إذا كانتا متساويتين ، فإن السلسلة تكون متناظرة. لذا عد صحيحًا ، وتوقف.
- إذا كانت النسخ الأصلية والنسخ المعكوسة غير متساوية ، فلن تكون السلسلة متماثلة. لذلك يجب أن نعيد False .
العملية الرئيسية هي الحصول على نسخة معكوسة من السلسلة. في بايثون ، هناك عدة طرق مختلفة للقيام بذلك.
ومع ذلك ، سوف نتناول طريقتين:
- استخدام تقطيع الخيوط
- استخدام الدالة المعكوسة () وطريقة الانضمام ()
كيفية عكس سلسلة Python باستخدام التقطيع
يُرجع بناء الجملة <any_str>[start: stop: step]
شريحة من السلسلة <any_str>
من start
وحتى stop
ولكن بدون تضمينها ، مع خطوة حجم step
.
- إذا حذفت
start
، تبدأ الشريحة في بداية السلسلة. - إذا لم تحدد فهرس
stop
، فإن الشريحة تمتد حتى نهاية السلسلة. - ويمكن استخدام القيم السالبة
step
لإرجاع الشرائح التي تبدأ من نهاية السلسلة.
لذا <any_str>[::-1]
بإرجاع نسخة معكوسة من السلسلة.
تحتوي خلية الكود التالية على تعريف الوظيفة is_palindrome()
.
تأخذ سلسلة كوسيطة ، وتعيد True
أو False
اعتمادًا على ما إذا كان متماثلًا أم لا.
هنا ، استخدمنا تقطيع السلاسل للحصول على نسخة عكسية من السلسلة.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
️ الآن بعد أن حددنا الوظيفة ، يمكننا المضي قدمًا واستدعاء أي سلسلة صالحة كمتغير.
is_palindrome("racecar") True
في خلية الشفرة أعلاه ، تعتبر سيارة racecar
متناظرة. لذا فإن الدالة is_palindrome()
ترجع True
كما هو متوقع.
الآن ، حاول استدعاء الدالة بأي سلسلة ليست متناظرة ، مثل river
.
is_palindrome("river") False
وكما ترى ، تقوم بإرجاع False
وهو الصحيح.
كيفية عكس سلسلة Python باستخدام معكوس () وضم ()
في Python ، يمكنك استخدام طريقة join()
مع وظيفة reversed()
لعكس سلسلة.
- ترجع الدالة reverse
reversed()
مكررًا عكسيًا عبر الأحرف الموجودة في السلسلة. - يمكن بعد ذلك استخدام طريقة
join()
لضم هذه الأحرف بالترتيب العكسي.
باستخدام الطريقة أعلاه ، يمكنك إعادة كتابة is_palindrome()
كما في خلية الكود أدناه.
def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False
يمكنك أيضًا استخدام is_palindrome()
داخل قائمة الفهم لتجميع كل المتجانسات من قائمة سلاسل أطول.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
إليك كيفية عمل الكود أعلاه:
- اجتياز
str_list
، واستدعاءis_palindrome()
على كل سلسلة. - إذا
is_palindrome()
بإرجاعTrue
، فأضف السلسلة إلى قائمةpalindromes
.
كما ترى في الإخراج أعلاه ، فإن palindromes
هي قائمة بجميع السلاسل المتجانسة في str_list
.
تحقق مما إذا كانت سلسلتان من Python هي الجناس الناقصة
سؤال شائع آخر قد تصادفه في المقابلات هو التحقق مما إذا كان زوج من السلاسل str1
و str2
عبارة عن الجناس الناقصة أم لا.
يُقال عن سلسلتين أن تكونا الجناس الناقصة إذا كان عدد الأحرف في السلسلتين متماثلًا تمامًا. هذا يعني أنه يمكنك الحصول على إحدى السلاسل من خلال تبديل أو إعادة ترتيب الأحرف في السلسلة الأخرى.
أمثلة على الجناس الناقصة تشمل طعم الحالة ، حفظ المزهرية ، الكوع أدناه ، وما إلى ذلك.
كيفية التحقق من الجناس الناقصة باستخدام كائن عداد في بايثون
هناك طريقة بسيطة وبديهية وهي حساب عدد تكرارات كل حرف في السلسلتين. ثم تحقق مما إذا كانت الأعداد متساوية.
يمكن القيام بذلك بسهولة أكبر باستخدام كائن Counter
من وحدة itertools
. يقوم كائن العداد بإرجاع قاموس Python: باستخدام الأحرف كمفاتيح والعدد المقابل كقيم .
ضع في اعتبارك السلاسل "save"
و "vase"
كما هو موضح أدناه.
str1 = "save" str2 = "vase"
هنا ، c1
و c2
كائنات مضادة تحتوي على عدد أحرف السلاسل str1
و str2
على التوالي.
from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True
c1 == c2
صوابًا لأن True
و str1
عبارة عن الجناس str2
.
باستخدام هذا المنطق ، يمكننا الآن المضي قدمًا وتحديد الوظيفة are_anagrams()
مع معلمتين word1
و word2
. في جسم الوظيفة ، نتحقق مما إذا كان Counter(word1) == Counter(word2)
.
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
️ للتحقق ، استدعِ are_anagrams()
مع str1
، str2
. نظرًا لأن str1
و str2
هما الجناس الناقصة ("save" و "vase") ، فإن الدالة ترجع True
، وهذا صحيح.
are_anagrams(str1, str2) True
كيفية التحقق من الجناس الناقصة باستخدام نسخ مرتبة من السلاسل
هناك طريقة أخرى يمكنك القيام بها.
إذا كانت السلاسل عبارة عن جناس ناقص ، فإن نسخهما المصنفة متساوية.
لذا يمكننا إعادة كتابة الدالة are_anagrams()
للتحقق مما إذا كانت النسخة المصنفة من str1
هي نفس النسخة التي تم فرزها من str2
. إذا كانتا متساويتين ، فإن السلسلتين هما الجناس الناقصة ؛ وإلا فهم ليسوا كذلك.
باستخدام الطريقة أعلاه للتحقق من تساوي النسخ المصنفة ، يمكننا إعادة كتابة الوظيفة are_anagrams()
على النحو التالي.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
دعونا الآن نجري بعض المكالمات الوظيفية.
- السلاسل "كوع" و "أدناه" هي الجناس الناقصة والوظيفة هي
are_anagrams()
ترجعTrue
. - و "state" و "tasted" ليسا الجناس الناقصة ، وتعيد الدالة
False
.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
تحقق مما إذا كانت سلسلة Python موجودة في حالة العنوان
هذا هو سؤالنا الأخير لهذا البرنامج التعليمي.
المشكلة : إعطاء سلسلة: اسم شخص - بالاسم الأول واسم العائلة.
يجب عليك التحقق مما إذا كان الحرف الأول من كل من الاسمين الأول والأخير مكتوبًا بأحرف كبيرة.
يسمى هذا النوع من الغلاف حيث يتم كتابة الحرف الأول من كل كلمة بأحرف كبيرة باسم حالة العنوان .
لذلك عليك التحقق مما إذا كان الاسم في حالة العنوان:
1. إذا كانت الإجابة بنعم ، فقم بإخراج رسالة تفيد بأن التنسيق في حالة العنوان.
2. عدا ذلك ، قم بإرجاع نسخة من السلسلة المنسقة في حالة العنوان
- تحتوي لغة Python على طريقة سلسلة مضمنة
istitle()
، والتي تتحقق مما إذا كانت السلسلة موجودة في حالة العنوان.
<str>.istitle()
بإرجاعTrue
إذا تم تنسيق السلسلة<str>
في حالة العنوان ، وإلا فإنها ترجعFalse
.
- ويعيد
title()
نسخة من السلسلة المنسقة في حالة العنوان.
يمكنك الآن استخدام هاتين الطريقتين لحل المشكلة.
حدد دالة check_titlecase()
تقبل name
كوسيطة.
- يمكنك استدعاء طريقة
istitle()
في سلسلة الإدخال للتحقق مما إذا كانت منسقة في حالة العنوان. - إذا كان
True
، يمكنك طباعة أن السلسلة موجودة بالفعل في حالة أحرف العنوان. - عدا ذلك ، يمكنك استدعاء طريقة
title()
وإرجاع نسخة من السلسلة في حالة العنوان.
تُظهر خلية الكود التالية تعريف check_titlecase()
.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
دعونا الآن نطلق على طريقة check_titlecase()
مع وسيطة.
check_titlecase("jane smith") # Output Jane Smith
في الإخراج أعلاه ، يمكنك أن ترى أن السلسلة "Jane Smith" موجودة الآن في حالة العنوان.
️ لنأخذ مثالاً آخر.
check_titlecase("agatha Christie") # Output Agatha Christie
هذه المرة ، دعنا نسمي الدالة بسلسلة ذات غلاف عنوان.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
يتم إعلامنا أن السلسلة منسقة في حالة العنوان ، وأن الوظيفة تعمل كما هو متوقع.
استنتاج
الآن دعونا نلخص المشاكل التي ناقشناها حتى الآن.
- للتحقق مما إذا كانت السلسلة متطابقة أم لا ، تحقق مما إذا كانت السلسلة وإصدارها المعكوس متساويتين. يمكنك استخدام طرق تقطيع السلاسل أو طرق مضمنة لعكس السلاسل.
- للتحقق مما إذا كانت السلسلتان عبارة عن جناس ناقص ، تحقق مما إذا كانت نسخهما المصنفة متساوية. ولفرز سلسلة ، استخدم وظيفة Sorted () المضمنة.
- للتحقق مما إذا كان الاسم في حالة أحرف العنوان ، استخدم طريقة .istitle () للتحقق وطريقة .title () للحصول على نسخة مغلفة بالعنوان من السلسلة.
أتمنى أن تكون قد استمتعت بهذا البرنامج التعليمي حول سلاسل Python. كخطوة تالية ، تعلم كيفية استخدام list comprehensions في Python أو تعرف على عامل التشغيل غير المتكافئ في Python.
نتمنى لك الاستمتاع بالتعلم والبرمجة!