Vraag Is er een manier om een ​​string in Python te substringen?


Is er een manier om een ​​string in Python te substringen om een ​​nieuwe string van het 3e karakter naar het einde van de string te krijgen?

Misschien zoals myString[2:end]?

Als het verlaten van het tweede deel betekent 'tot het einde', begint het vanaf het begin als u het eerste deel verlaat?


1589
2018-03-19 17:29


oorsprong


antwoorden:


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

Python noemt dit concept "slicing" en het werkt op meer dan alleen strings. Kijk eens hier voor een uitgebreide introductie.


2409
2018-03-19 17:30



Alleen voor de volledigheid omdat niemand anders het heeft genoemd. De derde parameter voor een array-slice is een stap. Dus een string omkeren is zo simpel als:

some_string[::-1]

Of het selecteren van alternatieve tekens zou zijn:

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

De mogelijkheid om voorwaarts en achterwaarts door de tekenreeks te gaan, handhaaft consistentie met het kunnen segmenteren vanaf het begin of einde.


305
2018-03-20 00:58



Substr () normaal (dat wil zeggen PHP en Perl) werkt op deze manier:

s = Substr(s, beginning, LENGTH)

Dus de parameters zijn beginning en LENGTH.

Maar het gedrag van Python is anders; het verwacht begin en één na EINDE (!). Dit is moeilijk te herkennen door beginners. Dus de juiste vervanging voor Substr (s, begin, LENGTH) is

s = s[ beginning : beginning + LENGTH]

91
2017-08-04 11:43



Een veelgebruikte manier om dit te bereiken, is door het snaren te snijden. MyString[a:b] geeft je een substring van index a naar (b - 1)


45
2018-03-02 05:19



Een voorbeeld lijkt hier te ontbreken: volledige (ondiepe) kopie.

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

Dit is een algemeen idioom voor het maken van een kopie van sequentietypen (niet van geïnterneerde reeksen). [:] Shallow kopieert een lijst, zie python-list-slice-gebruikte-for-no-duidelijke-reason.


17
2018-03-19 18:02



Is er een manier om een ​​string in Python te substringen om een ​​nieuwe string van het 3e karakter naar het einde van de string te krijgen?

Misschien zoals myString[2:end]?

Ja, dit werkt echt als u het toewijst, of binden, de naam,end, naar constante singleton, None:

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

Segmentnotatie heeft 3 belangrijke argumenten:

  • begin
  • hou op
  • stap

Hun standaardwaarden als ze niet zijn opgegeven None - maar we kunnen ze expliciet doorgeven:

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

Als het verlaten van het tweede deel betekent 'tot het einde', begint het vanaf het begin als u het eerste deel verlaat?

Ja, bijvoorbeeld:

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

Merk op dat we start in de slice opnemen, maar we gaan alleen naar, en niet inclusief, stop.

Wanneer stap is None, standaard gebruikt de slice 1 voor de stap. Als je met een negatief geheel getal stapt, is Python slim genoeg om van het einde naar het begin te gaan.

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

Ik leg de segmentnotatie in detail in detail uit mijn antwoord op het uitleggen van slice-notatie Vraag. 


12
2018-06-23 21:53



Je hebt het daar, behalve voor "einde". Het wordt slice-notatie genoemd. Je voorbeeld zou moeten lezen:

new_sub_string = myString[2:]

Als u de tweede parameter weglaat, is dit impliciet het einde van de tekenreeks.


7
2018-03-19 17:31



Ik zou graag twee punten toevoegen aan de discussie:

  1. Je kunt gebruiken None in plaats daarvan op een lege plek om "van het begin" of "tot het einde" op te geven:

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

    Dit is vooral nuttig in functies, waar u geen lege ruimte als argument kunt opgeven:

    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 heeft plak voorwerpen:

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

6
2017-08-31 04:28



Misschien heb ik het gemist, maar ik kon op deze pagina geen volledig antwoord vinden op de oorspronkelijke vraag (en) omdat variabelen hier niet verder worden besproken. Dus ik moest verder zoeken.

Aangezien ik nog geen commentaar mag geven, wil ik hier mijn conclusie toevoegen. Ik weet zeker dat ik niet de enige was die er interesse in had toen ik deze pagina benaderde:

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

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

Als je het eerste deel verlaat, krijg je

 >>>myString[:end]
 'Hello' 

En als je de: in het midden ook hebt verlaten, heb je de eenvoudigste subtekenreeks, wat het 5e teken zou zijn (het aantal begint met 0, dus het is in dit geval de spatie):

 >>>myString[end]
 ' '

2
2018-03-18 12:01



Het gebruik van hard gecodeerde indexen zelf kan een puinhoop zijn.

Om dit te voorkomen, biedt Python een ingebouwd object slice().

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

Als we willen weten hoeveel geld ik nog over heb.

Normale oplossing:

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

Plakjes gebruiken:

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

Met behulp van slice krijg je leesbaarheid.


0
2017-08-31 04:50