Jak uzyskać ciąg znaków w Pythonie?

Czy w Pythonie istnieje sposób na podanie fragmentu łańcucha, aby uzyskać nowy ciąg od trzeciego znaku do końca łańcucha?

Może jak myString[2:end]?

Jeśli opuszczenie drugiej części oznacza "do końca", a jeśli opuszczenie pierwszej części, czy zaczyna się od początku?

Author: lospejos, 2009-03-19

13 answers

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

Python nazywa to pojęcie "krojeniem" i działa nie tylko na strunach. Zajrzyj Tutaj , aby uzyskać wyczerpujące wprowadzenie.

 3360
Author: Paolo Bergantino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:51

Tak dla kompletności, jak nikt inny o tym nie wspomniał. Trzeci parametr wycinka tablicy to krok. Więc odwrócenie ciągu jest tak proste jak:

some_string[::-1]

Lub wybranie alternatywnych znaków to:

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

Możliwość przechodzenia do przodu i do tyłu przez ciąg utrzymuje spójność z możliwością układania plasterka od początku lub końca.

 424
Author: Endophage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-04 23:55:10

Substr () normalnie (tj. PHP i Perl) działa w ten sposób:

s = Substr(s, beginning, LENGTH)

Więc parametry to beginning i LENGTH.

Ale zachowanie Pythona jest inne; oczekuje początku i końca (!). To jest trudne do zauważenia przez początkujących. więc poprawnym zamiennikiem dla Podstr (s, początek, długość) jest

s = s[ beginning : beginning + LENGTH]
 138
Author: Michał Leon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 15:24:49

Powszechnym sposobem osiągnięcia tego celu jest krojenie strun.

MyString[a:b] podaje podłańcuch od indeksu a do (b-1).

 65
Author: codingscientist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-02 16:24:50

Brakuje tu jednego przykładu: pełna (płytka) Kopia.

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

Jest to wspólny idiom do tworzenia kopii typów sekwencji (nie internowanych ciągów), [:]. Płytkie kopiuje listę, zobacz składnia list Pythona używana bez oczywistego powodu.

 26
Author: gimel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-02 16:23:47

Czy w Pythonie istnieje sposób na podanie fragmentu łańcucha, aby uzyskać nowy ciąg od trzeciego znaku do końca łańcucha?

Może jak myString[2:end]?

Tak, to rzeczywiście działa, jeśli przypisać, lub bind , Nazwa, end, do stałej singleton, None:

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

Notacja Slice ma 3 ważne argumenty:

  • start
  • stop
  • krok

Ich wartości domyślne, gdy nie podano są None - ale możemy je przekazać jawnie:

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

Jeśli opuszczenie drugiej części oznacza "do końca", jeśli opuszczenie pierwszej części, czy zaczyna się od początku?

Tak, na przykład:

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

Zauważ, że włączamy start w plasterku, ale idziemy tylko do, i nie wliczając, stop.

Gdy step jest None, domyślnie plasterek używa 1 dla tego kroku. Jeśli krok z ujemną liczbą całkowitą, Python jest wystarczająco inteligentny, aby przejść od końca do początku.

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

I explain slice notacja bardzo szczegółowo w moja odpowiedź, aby wyjaśnić pytanie notacji plaster.

 19
Author: Aaron Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Masz to tutaj, z wyjątkiem "koniec". To się nazywa notacja na plasterki. Twój przykład powinien brzmieć:

new_sub_string = myString[2:]

Jeśli pominiesz drugi parametr, będzie to w domyśle koniec łańcucha.

 8
Author: bouvard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 15:23:28

Jeśli myString zawiera numer konta, który zaczyna się od przesunięcia 6 i ma długość 9, możesz wyodrębnić numer konta w ten sposób: acct = myString[6:][:9].

Jeśli OP to zaakceptuje, mogą chcieć spróbować, w sposób eksperymentalny,

myString[2:][:999999]

To działa - nie jest podnoszony błąd, i nie występuje domyślne 'string padding'.

 7
Author: CopyPasteIt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-05 11:33:06

Chciałbym dodać dwa punkty do dyskusji:

  1. Możesz użyć None zamiast pustego miejsca, aby określić "od początku "lub"do końca":

    'abcde'[2:None] == 'abcde'[2:] == 'cde'
    
    Jest to szczególnie przydatne w funkcjach, gdzie nie można podać pustej przestrzeni jako argumentu:
    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 ma slice obiekty:

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    
 6
Author: ostrokach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 22:36:32

Cóż, mam sytuację, w której musiałem przetłumaczyć skrypt PHP na Python i miał wiele zastosowań substr(string, beginning, LENGTH).
Jeśli wybrałbym string[beginning:end] Pythona, musiałbym obliczyć dużo indeksów końcowych, więc łatwiejszym sposobem było użycie string[beginning:][:length], oszczędziło mi to wiele kłopotów.

 6
Author: Edson Horacio Junior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-29 18:31:46

Może to przeoczyłem, ale nie mogłem znaleźć na tej stronie pełnej odpowiedzi na oryginalne pytanie(pytania), ponieważ zmienne nie są dalej omawiane tutaj. Więc musiałem szukać dalej.

Ponieważ nie mogę jeszcze komentować, pozwolę sobie tutaj dodać swój wniosek. Jestem pewien, że nie tylko ja byłem zainteresowany tym, gdy wchodziłem na tę stronę:

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

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

Jeśli opuścisz pierwszą część, otrzymasz

 >>>myString[:end]
 'Hello' 

I jeśli zostawiłeś : w środku również masz najprostszy podciąg, który będzie to 5. znak (count zaczynając od 0, więc w tym przypadku jest to puste):

 >>>myString[end]
 ' '
 3
Author: Rudi Uhl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-18 12:01:43

Używanie indeksów na twardo może być bałaganem.

Aby tego uniknąć, Python oferuje wbudowany obiekt slice().
string = "my company has 1000$ on profit, but I lost 500$ gambling."
Jeśli chcemy wiedzieć, ile pieniędzy mi zostało.

Roztwór normalny:

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

Używając plasterków:

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

Używając slice zyskujesz czytelność.

 2
Author: levi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 15:26:57
a="Helloo"
print(a[:-1])

W powyższym kodzie [:-1] deklaruje drukowanie od początku do maksymalnego limitu-1.

Wyjście:

>>> Hello

Uwaga: tutaj a [: -1] jest również tym samym co a [0:-1] i A [0: len (a) -1]

a="I Am Siva"
print(a[2:])

Wyjście:

>>> Am Siva

W powyższym kodzie a [2:] deklaruje drukowanie a od indeksu 2 do ostatniego elementu.

Pamiętaj, że jeśli ustawisz maksymalny limit, aby wydrukować łańcuch, jako (x), to wydrukuje on łańcuch till (x - 1), a także pamiętaj, że indeks listy lub łańcucha zawsze będzie zaczynał się od 0.

 0
Author: Code Carbonate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-03 14:26:48