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?




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)




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.




Links