python منتديات هل هناك طريقة لسلسلة سلسلة في بايثون؟




منتديات بايثون (7)

هل هناك طريقة لاستبدال سلسلة في Python ، للحصول على سلسلة جديدة من الحرف الثالث إلى نهاية السلسلة؟

ربما مثل myString[2:end] ؟

إذا كان ترك الجزء الثاني يعني "حتى النهاية" ، إذا تركت الجزء الأول ، هل يبدأ من البداية؟

https://code.i-harness.com


هل هناك طريقة لاستبدال سلسلة في Python ، للحصول على سلسلة جديدة من الحرف الثالث إلى نهاية السلسلة؟

ربما مثل myString[2:end] ؟

نعم ، هذا يعمل بالفعل إذا قمت بتعيين ، أو bind ، اسم ، end ، مفردة مفردة ثابتة ، None :

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

يحتوي تدوين الشريحة على ثلاث حجج مهمة:

  • بداية
  • توقف
  • خطوة

افتراضاتهم عندما لا تعطى لا None - ولكن يمكننا تمريرها بشكل صريح:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

إذا كان ترك الجزء الثاني يعني "حتى النهاية" ، إذا تركت الجزء الأول ، هل يبدأ من البداية؟

نعم ، على سبيل المثال:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

لاحظ أننا ندخل في الشريحة ، لكننا نذهب فقط إلى ، ولا تشمل ، التوقف.

عندما تكون الخطوة بلا ، تستخدم الشريحة بشكل افتراضي 1 للخطوة. إذا قمت بالضغط على عدد صحيح سالب ، فإن بايثون ذكية بما فيه الكفاية للانتقال من النهاية إلى البداية.

>>> myString[::-1]
'0987654321'

أفسر شريحة تدوين بتفصيل كبير في جوابي على شرح شريحة التدوين سؤال.


Substr () عادة (أي PHP ، Perl) يعمل بهذه الطريقة:

s = Substr(s, beginning, LENGTH)

لذلك المعلمات تبدأ و LENGTH

لكن سلوك بيثون مختلف ، فهو يتوقع بداية وأخرى بعد نهاية (!). هذا صعب للمبتدئين. لذا فإن الاستبدال الصحيح لـ Substr (s ، البداية ، LENGTH) هو

s = s[ beginning : beginning + LENGTH]

أود أن أضيف نقطتين للمناقشة:

  1. يمكنك استخدام بلا بدلاً من ذلك في مساحة خالية لتحديد "من البداية" أو "إلى النهاية":

    'abcde'[2:None] == 'abcde'[2:] == 'cde'
    

    هذا مفيد بشكل خاص في الوظائف ، حيث لا يمكنك توفير مساحة فارغة كوسيطة:

    def substring(s, start, end):
        """Remove `start` characters from the beginning and `end` 
        characters from the end of string `s`.
    
        Examples
        --------
        >>> substring('abcde', 0, 3)
        'abc'
        >>> substring('abcde', 1, None)
        'bcde'
        """
        return s[start:end]
    
  2. بايثون لديها كائنات slice :

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    

ربما فاتني ذلك ، لكني لم أتمكن من العثور على إجابة كاملة على هذه الصفحة عن السؤال (الأسئلة) الأصلي لأن المتغيرات لم تتم مناقشتها هنا. لذلك اضطررت للذهاب في البحث.

بما أنني لست مسموحًا بعد بالتعليق ، دعني أضيف استنتاجي هنا. أنا متأكد من أنني لم أكن الوحيد المهتمين به عند الوصول إلى هذه الصفحة:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

إذا تركت الجزء الأول ، تحصل عليه

 >>>myString[:end]
 'Hello' 

وإذا تركت: في المنتصف ، فستحصل على أبسط سلسلة فرعية ، والتي ستكون الحرف الخامس (يبدأ العدد بـ 0 ، لذا فهو فارغ في هذه الحالة):

 >>>myString[end]
 ' '

فقط لمجرد عدم ذكر أي شخص آخر. المعلمة الثالثة لشريحة صفيف هي خطوة. لذا فإن عكس سلسلة بسيطة مثل:

some_string[::-1]

أو اختيار الأحرف البديلة سيكون:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

القدرة على التقدم للأمام والخلف من خلال السلسلة تحافظ على التناسق مع القدرة على تجميع الشريحة من البداية أو النهاية.


كنت قد حصلت على حق هناك باستثناء "نهاية". دعاه يسمى شريحة. يجب أن يقرأ المثال الخاص بك.

new_sub_string = myString[2:]

إذا تركت المعلمة الثانية ، فهذا يعني ضمناً نهاية السلسلة.


>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

تطلق بايثون على هذا المفهوم "تشريح" ويعمل على أكثر من مجرد سلاسل. ألقِ نظرة here للحصول على مقدمة شاملة.





string