C'è un modo per sottostrare una stringa in Python?


Answers

Solo per completezza come nessun altro ha menzionato. Il terzo parametro per una sezione di matrice è un passo. Quindi invertire una stringa è semplice come:

some_string[::-1]

O selezionando caratteri alternativi sarebbe:

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

La possibilità di andare avanti e indietro attraverso la stringa mantiene la coerenza con la possibilità di allineare una fetta dall'inizio o dalla fine.

Question

C'è un modo per eseguire la sottostringa di una stringa in Python, per ottenere una nuova stringa dal 3 ° carattere alla fine della stringa?

Forse come myString[2:end] ?

Se lasciare la seconda parte significa 'fino alla fine', se si abbandona la prima parte, inizia dall'inizio?




C'è un modo per eseguire la sottostringa di una stringa in Python, per ottenere una nuova stringa dal 3 ° carattere alla fine della stringa?

Forse come myString[2:end] ?

Sì, questo in realtà funziona se assegni, o bind , il nome, la end , a singleton costante, None :

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

La notazione Slice ha 3 argomenti importanti:

  • inizio
  • Stop
  • passo

Le loro impostazioni predefinite quando non vengono fornite sono None , ma possiamo passarle esplicitamente:

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

Se lasciare la seconda parte significa 'fino alla fine', se si lascia la prima parte, inizia dall'inizio?

Sì, ad esempio:

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

Nota che includiamo l'avvio nella sezione, ma andiamo solo fino a, e non includendo, stop.

Quando il passo è None , per impostazione predefinita la sezione utilizza 1 per il passo. Se passi con un intero negativo, Python è abbastanza intelligente da andare dall'inizio alla fine.

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

Spiego dettagliatamente la notazione delle sezioni nella mia risposta a Spiega la notazione della sezione Domanda.




Vorrei aggiungere due punti alla discussione:

  1. Puoi utilizzare None invece su uno spazio vuoto per specificare "dall'inizio" o "fino alla fine":

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

    Ciò è particolarmente utile nelle funzioni, dove non è possibile fornire uno spazio vuoto come argomento:

    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. Python ha oggetti slice :

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



Nessuno menziona sull'utilizzo degli indici hardcode può essere un disastro.

Per evitarlo, python offre una slice() oggetti slice() integrata.

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

Se vogliamo sapere quanti soldi mi sono rimasti.

Soluzione normale:

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

Utilizzando le fette:

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

È possibile notare utilizzando la fetta che si acquisisce leggibilità




Un modo comune per raggiungere questo obiettivo è l'affettamento delle stringhe. MyString[a:b] ti fornisce una sottostringa dall'indice a a (b - 1)