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




اكواد جاهزة (9)

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

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

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


Answers

لا أحد يذكر عن استخدام فهارس الأقراص الصلبة نفسها يمكن أن تكون في حالة من الفوضى.

من أجل تجنب ذلك ، يقدم python slice() كائن مدمج slice() .

string = "my company has 1000$ on profit, but I lost 500$ gambling."

إذا كنا نريد أن نعرف كم من المال حصلت على اليسار.

الحل العادي:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

باستخدام الشرائح:

EARNINGS = slice(15,19)
LOSSES = slice(43,46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

يمكنك ملاحظة استخدام شريحة يمكنك اكتسابها


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

  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'
    

أحد الأمثلة على ما يبدو مفقود هنا: نسخة كاملة (ضحلة).

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>> 

هذا هو تعبير شائع لإنشاء نسخة من أنواع التسلسل (وليس من السلاسل التي تحتفظ بها). [:] نسخ ضحل لقائمة ، انظر python-list-slice-used-for-no-obvious-reason .


هل هناك طريقة لاستبدال سلسلة في 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'

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


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

some_string[::-1]

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

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

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


طريقة شائعة لتحقيق ذلك هي عن طريق تقطيع السلسلة. يعطيك MyString[a:b] سلسلة فرعية من الفهرسة a إلى (b - 1)


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

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

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

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

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

 >>>myString[:end]
 'Hello' 

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

 >>>myString[end]
 ' '

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

new_sub_string = myString[2:]

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


طريقة أخرى لمعرفة ما إذا كانت سلسلة تحتوي على بضعة أحرف أم لا مع قيمة إرجاع Boolean (أي True أو `False):

str1 = "This be a string"
find_this = "tr"
if find_this in str1:
    print find_this, " is been found in ", str1
else:
    print find_this, " is not found in ", str1




python string