برامج بايثون في عمليات السلسلة

نشرت: 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.

نتمنى لك الاستمتاع بالتعلم والبرمجة!