St

Stringek ebben a kurzusban: Python

83 feladat

A(z) Stringek fogalomról

A Pythonban egy str Unicode-kódpontok módosíthatatlan sorozata. Ezek közé tartozhatnak betűk, diakritikus jelek, pozicionáló karakterek, számok, pénznemszimbólumok, emodzsik, írásjelek, szóköz- és sortöréskarakterek, és még sok más.

Ha mélyebben szeretnéd megérteni, milyen információt kódol egy string (vagyis »honnan tudja a számítógép, hogyan fordítsa le a nullákat és egyeseket betűkké?«), ez a blogbejegyzés ma is hasznos. A Python dokumentációjában is található egy nagyon részletes unicode HOWTO, amely bemutatja, hogyan támogatja a Python az Unicode specifikációt a str, bytes és re modulokban, kitér a területi beállítások szempontjaira, valamint néhány gyakori kódolási és fordítási problémára.

A stringek minden általános sorozatműveletet megvalósítanak, és bejárhatók for item in <str> vagy for index, item in enumerate(<str>) szintaxissal. Az egyes kódpontokra (1 hosszúságú stringekre) balról 0-based index számmal, jobbról -1-based index számmal hivatkozhatsz.

A stringek összefűzhetők <str> + <other str> vagy <str>.join(<iterable>) módon, és feloszthatók a <str>.split(<separator>) segítségével. Emellett számos további formázási, összeállítási és sablonozási lehetőséget is kínálnak.

Egy str literál aposztróffal (') vagy idézőjellel (") hozható létre. A \ escape-karakter szükség szerint elérhető.


>>> single_quoted = 'These allow "double quoting" without "escape" characters.'

>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."

A többsoros stringeket ''' vagy """ jelekkel hozzuk létre.

>>> triple_quoted = '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
  Line break characters, tabs and other whitespace is fully supported. Remember - The escape "\" character is also available if needed (as can be seen below). 
  
  You\'ll most often encounter multi-line strings as "doc strings" or "doc tests" written just below the first line of a function or class definition.
    They\'re often used with auto documentation ✍ tools.
    '''

A str(<object>) konstruktor segítségével más objektumokból hozhatsz létre vagy alakíthatsz stringet:

>>> my_number = 42
>>> str(my_number)
...
"42"

Bár a str(<object>) konstruktor használható stringgé alakításra vagy konvertálásra, nem fogja bejárni és nem bontja ki az objektumot. Ez eltér más adattípusok, például a list(), set(), dict() vagy tuple() konstruktorainak viselkedésétől, és meglepő eredményekkel járhat.

>>> numbers = [1,3,5,7]
>>> str(numbers)
...
'[1,3,5,7]'

Egy str kódpontjaira balról 0-based index számmal hivatkozhatsz:

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

Az indexelés jobbról is működik, -1-based index számmal kezdve:

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

A Pythonban nincs külön »karakter« vagy »rune« típus, ezért egy string indexelése egy 1 hosszúságú új str-t eredményez:


>>> website = "exercism"
>>> type(website[0])
<class 'str'>

>>> len(website[0])
1

>>> website[0] == website[0:1] == 'e'
True

Részstringeket szeleteléssel választhatsz ki a <str>[<start>:<stop>:<step>] használatával, így új string jön létre. Az eredmény nem tartalmazza a stop indexet. Ha nincs megadva start, akkor a kezdőindex 0 lesz. Ha nincs megadva stop, akkor a stop index a string vége lesz.

moon_and_stars = '🌟🌟🌙🌟🌟⭐'

>>> moon_and_stars[1:4]
'🌟🌙🌟'

>>> moon_and_stars[:3]
'🌟🌟🌙'

>>> moon_and_stars[3:]
'🌟🌟⭐'

>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'

>>> moon_and_stars[:-3]
'🌟🌟🌙'

A stringek kisebb stringekre is bonthatók a <str>.split(<separator>) segítségével, amely részstringek list-jét adja vissza. Ha a <str>.split() metódust argumentum nélkül használod, a stringet whitespace mentén bontja fel.

>>> cat_ipsum = "Destroy house in 5 seconds command the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'command', 'the', 'hooman.']


>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(',')
...
['feline', ' four-footed', ' ferocious', ' furry']


>>> colors = """red,
orange,
green,
purple,
yellow"""

>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']

A stringek a + operátorral fűzhetők össze. Ezt a módszert azonban mértékkel érdemes használni, mert nem túl hatékony, és nehezen karbantartható.

language = "Ukrainian"
number = "nine"
word = "дев'ять"

sentence = word + " " + "means" + " " + number + " in " + language + "."

>>> print(sentence)
...
"дев'ять means nine in Ukrainian."

Ha egy list, tuple, set vagy más gyűjtemény elemeit egyetlen str-be kell összefűzni, a <str>.join(<iterable>) jobb választás:

# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'

# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'

>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'


# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation")  # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'

>>> flowers = {"rose", "daisy", "carnation"}  # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'

>>> phrase = "This is my string"  # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'


# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under' # Note the leading space, but no trailing space.
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'

# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0] # This becomes one string, similar to ' ⤴️ under'.
>>> separator.join(upper_words)
 'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'

A stringek minden általános sorozatműveletet támogatnak. Az egyes kódpontokon for item in <str> ciklussal mehetsz végig. Az indexeket az elemekkel együtt for index, item in enumerate(<str>) ciklussal járhatod be.


>>> exercise = 'လေ့ကျင့်'

# Note that there are more code points than perceived glyphs or characters.
# Care should be used when iterating over languages that use
# combining characters, or when dealing with emoji.
>>> for code_point in exercise:
...    print(code_point)
...
လ
ေ
့
က
ျ
င
်
့

# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
...    print(index, ": ", code_point)
...
0 :  လ
1 :  ေ
2 :  ့
3 :  က
4 :  ျ
5 :  င
6 :  ်
7 :  ့

Stringmetódusok

A Python gazdag stringmetódus-készletet kínál, amelyek segítenek a keresésben, tisztításban, felosztásban, átalakításban, fordításban és sok más műveletben. E módszerek közül néhányat egy másik feladatban mutatunk be.

Formázás

A Python emellett gazdag eszközkészletet kínál a stringek formázásához és sablonozásához, valamint kifinomultabb szövegfeldolgozást tesz lehetővé a re (reguláris kifejezések), a difflib (sorozat-összehasonlítás) és a textwrap modulokon keresztül. Ha szeretnél egy remek bevezetőt a Python stringformázásába, nézd meg ezt a Real Python-os bejegyzést. A stringmetódusok bevezetőjéhez pedig a Strings and Character Data in Python oldalt ajánljuk ugyanezen a weboldalon.

Kapcsolódó típusok és kódolások

A str (szöveges sorozat) mellett a Pythonnak megfelelő bináris sorozattípusai is vannak, amelyeket a bináris adatszolgáltatások alatt foglaltunk össze: bytes (bináris sorozat), bytearray és memoryview a bináris adatok hatékony tárolásához és kezeléséhez. Emellett a Streams lehetővé teszi bináris adatok küldését és fogadását hálózati kapcsolaton keresztül, visszahívások használata nélkül.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Stringek fogalmat

A gyakorlás zárolva

Oldj fel még 4 feladatot, hogy gyakorolhasd a(z) Stringek fogalmat