Teknologian jakaminen

Luku 6 Merkkijonoobjektit ja viipalointitoiminnot

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Sisällysluettelo

Luku 6 Merkkijonoobjektit ja viipalointitoiminnot

6.1 Merkkijonoobjekti

6.2 Yleisesti käytetyt menetelmät merkeissä

6.3 Viipalointi

Luku 6 Merkkijonoobjektit ja viipalointitoiminnot

6.1 Merkkijonoobjekti

Merkkijono: Merkkijono, joka koostuu useista merkeistä

Hahmot: Paljaalla silmällä näkyvät symbolit

Tavut: ei näy paljaalla silmällä

Kuinka python määrittelee merkkijonot:

lainausmerkit kaksoislainausmerkit kolminkertaiset lainausmerkit str()

6.2 Yleisesti käytetyt menetelmät merkeissä

 >>> dir(s)
 ['capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

iso kirjain ------- Tee merkkijonon ensimmäinen kirjain isolla kirjaimella

 >>> s
 'this is a string'
 >>> s.capitalize()
 'This is a string'

center(width, fillchar=' ') ------ Keskitä merkkijono annetun pituuden mukaan ja kohdista se keskelle

rjust --------- tasattu oikealle

vain ------ suuntaus vasemmalle

 >>> help(s.center)
 Help on built-in function center:
 ​
 center(width, fillchar=' ', /) method of builtins.str instance
     Return a centered string of length width.
 ​
     Padding is done using the specified fill character (default is a space).
 ​
 >>> s.center(40)
 '            this is a string            '
 >>> s.center(40,"*")
 '************this is a string************'
 >>> s.rjust(40)
 '                        this is a string'
 >>> s.ljust(40)
 'this is a string                        '
 >>> s.ljust(40,"*")
 'this is a string************************'
 >>> s.rjust(40,"*")
 '************************this is a string'

count --------- laskee kuinka monta kertaa merkki esiintyy merkkijonossa

 >>> s
 'this is a string'
 >>> s.count("s")
 3
 >>> s.count("is")
 2

endswith ------- Selvitä, loppuuko merkkijono XXX

startswith ------- Selvitä, alkaako merkkijono XXX

 >>> s.endswith("g")
 True
 >>> s.endswith("ing")
 True
 >>> s.endswith("f")
 False
 >>> s.startswith("t")
 True
 >>> s.startswith("f")
 False

index ------ Sijainti, jossa etsitty merkki tai merkkijono esiintyy ensimmäisenä merkkijonossa. Jos sitä ei ole olemassa, annetaan poikkeus (virheraportti).

rindex ------- Hae oikealta vasemmalle, paikka, jossa etsittävä merkki tai merkkijono esiintyy ensimmäisenä merkkijonossa (vastaa merkin viimeistä esiintymistä tai merkkijonoa, joka etsii vasemmalta oikealle merkkijonossa) ), jos sitä ei ole, tee poikkeus (ilmoita virheestä)

 >>> s
 'this is a string'
 >>> s.index("s")
 3
 >>> s.index("is")
 2
 >>> s.index("f")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 ValueError: substring not found
 >>> s.index(" ")
 4
 >>> s.rindex("s")
 10
 >>> s.rindex("f")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 ValueError: substring not found

find ------- Etsittävän merkin tai merkkijonon ensimmäisen esiintymän sijainti merkkijonossa Jos sitä ei ole, palautetaan -1.

rfind----- Hae oikealta vasemmalle, haettavan merkin tai merkkijonon ensimmäisen esiintymän paikkaa merkkijonosta (vastaa merkin tai merkkijonon viimeistä esiintymää merkkijonossa, joka löydettiin vasemmalta oikealla ), palauttaa -1, jos sitä ei ole olemassa

 >>> s
 'this is a string'
 >>> s.find("s")
 3
 >>> s.find("f")
 -1
 >>> s.rfind("f")
 -1
 >>> s.rfind("s")
 10

encode ----- menetelmä merkkijonojen muuntamiseksi tavuiksi python3:ssa, decode() -menetelmä tavujen muuntamiseksi merkkijonoiksi (menetelmä tavuina)

 >>> s
 'this is a string'
 >>> s.encode()
 b'this is a string'
 >>> d = s.encode()
 >>> d
 b'this is a string'
 >>> type(d)
 <class 'bytes'>
 >>> d
 b'this is a string'
 >>> d.decode()
 'this is a string'
 >>> ss = d.decode()
 >>> ss
 'this is a string'
 >>> type(ss)
 <class 'str'>

muoto ------ muotomerkkijono, ketjuta merkkijonot

isupper ------ Määrittää, onko merkkijonossa vain isoja kirjaimia

islower ----- ------ Selvitä, onko merkkijonossa kaikki pieniä kirjaimia

>>> s.isupper()
False
>>> s.islower()
False

nimike ----- Selvitä, onko se otsikko

>>> s.istitle()
False
>>> ss = "This Is A Dog"
>>> ss.istitle()
True

isspace ----- Sitä ei yleensä käytetä määrittämään, onko se välilyönti.

>>> sss = "       "
>>> sss.isspace()
True
>>> ss
'This Is A Dog'
>>> ss.isspace()
False

isdigit ------ Selvitä, onko se luku

>>> sss = "123234344"
>>> sss.isdigit()
True
>>> ss
'This Is A Dog'
>>> ss.isdigit()
False
>>> sss = "1233443gggg"
>>> sss.isdigit()
False

isalnum ------ määrittää, onko se kirjaimia vai numeroita (aakkosnumeerinen)

>>> help(s.isalnum)
Help on built-in function isalnum:

isalnum() method of builtins.str instance
    Return True if the string is an alpha-numeric string, False otherwise.

    A string is alpha-numeric if all characters in the string are alpha-numeric and
    there is at least one character in the string.

>>> sss
'1233443gggg'
>>> sss.isalnum()
True
>>> ss
'This Is A Dog'
>>> ss.isalnum()
False

isalpha ------ määrittää, onko se kirjain

otsikko ----- Muunna merkkijono otsikkomuotoon

>>> s
'This is a string'
>>> s.istitle()
False
>>> s.title()
'This Is A String'
>>> sss = s.title()
>>> sss
'This Is A String'
>>> sss.istitle()
True

ylempi ------- Muunna merkkijono isoiksi kirjaimiksi

pienempi ------- Muunna merkkijono pieniksi kirjaimiksi

>>> s
'This is a string'
>>> s.lower()
'this is a string'
>>> s.upper()
'THIS IS A STRING'

split ----- Jaa merkkijono määritetyn symbolin mukaan ja palautusarvo on lista

>>> s
'This is a string'
>>> s.split(" ")
['This', 'is', 'a', 'string']
>>> l = s.split(" ")
>>> l
['This', 'is', 'a', 'string']
>>> type(l)
<class 'list'>
>>> l = s.split("s")
>>> l
['Thi', ' i', ' a ', 'tring']

join ------ ketjuttaa iteroitavan objektin merkkijonoksi määritetyn muodon mukaisesti

>>> ls = ["A","B","c","d"]
>>> type(ls)
<class 'list'>
>>> ss = " ".join(ls)
>>> ss
'A B c d'
>>> type(ss)
<class 'str'>
>>> ss = "*".join(ls)
>>> ss
'A*B*c*d'

nauha ------- poista välit molemmilta puolilta

rstrip------ tyhjennä välit oikealla

lstrip -------- tyhjennä vasemmat välilyönnit

>>> ss = "                              hhhhhhh                                  "
>>> ss
'                              hhhhhhh                                  '
>>> ss.strip()
'hhhhhhh'
>>> ss.strip()
'hhhhhhh'
>>> ss
'                              hhhhhhh                                  '
>>> ss.rstrip()
'                              hhhhhhh'
>>> ss.lstrip()
'hhhhhhh                                  '

korvaa ("alkuperäinen merkki", "uusi merkki") ------ Korvaa vastaava merkki

>>> s
'This is a string'
>>> s.replace("s","t")
'Thit it a ttring'

6.3 Viipalointi

Slice: käytetään toistettavien objektien (säiliöiden) erottamiseen

Kielioppisäännöt:

object[start_index:end_index:step]

start_index ------- Aloitusindeksi (aloitusasento)

end_index ------ Loppuindeksi (päätepaikka), ei sisällä end_indexin arvoa

askel ---- askelkoko, voi olla positiivinen tai negatiivinen luku, positiivinen luku (vasemmalta oikealle) negatiivinen luku (oikealta vasemmalle), oletusarvo on 1

object[:]  ----- 切割的是一个完整的对象
object[start_index:]  ------ 从start_index开始切割到最后的位置,步长为1
object[:end_index] ------ 从最开始的位置切割到end_index处,但是不包含end_index
object[start_index:end_index] ------- 从start_index开始切割到end_index处,但是不包含end_index,步长为1
object[start_index:end_index:step] ------------ 从start_index开始切割到end_index处,但是不包含end_index,步长为step  

Etusulkemisen ja takaosan avaamisen välinen aika

ls = [0,1,2,3,4,5,6,7,8,9]

1. Leikkaa yksi arvo

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[0]
0
>>> ls[-4]
6

2. Leikkaa koko esine

>>> ls[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[::]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[::-1]  #-1 表示从右往左切割 所以是倒序
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

3. aloitusindeksi ja loppuindeksi ovat molemmat positiivisia lukuja

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[1:6]
[1, 2, 3, 4, 5]
>>> ls[1:6:-1]  # start_index=1 end_index = 6表示的是从1切割到6的位置,但是不包含6处的值,从左往右切割,step=-1 表示从右往左   
[]
>>> ls[6:1]
[]
>>> ls[6:1:-1]
[6, 5, 4, 3, 2]
>>> ls[:6]
[0, 1, 2, 3, 4, 5]
>>> ls[:6:-1]
[9, 8, 7]
>>> ls[6:]
[6, 7, 8, 9]
>>> ls[6::-1]
[6, 5, 4, 3, 2, 1, 0]
>>>

4. aloitusindeksi ja loppuindeksi ovat molemmat negatiivisia lukuja

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[-1:-6]
[]
>>> ls[-1:-6:-1]
[9, 8, 7, 6, 5]
>>> ls[-6:-1]
[4, 5, 6, 7, 8]
>>> ls[:-6]
[0, 1, 2, 3]
>>> ls[:-6:-1]
[9, 8, 7, 6, 5]
>>> ls[-6:]
[4, 5, 6, 7, 8, 9]
>>> ls[-6::-1]
[4, 3, 2, 1, 0]

5. Start_index ja end_index yhdistetään positiiviseen ja negatiiviseen

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[1:-6]
[1, 2, 3]
>>> ls[1:-6:-1]
[]
>>> ls[-1:6]
[]
>>> ls[-1:6:-1]
[9, 8, 7]

6. Jatkuva viipalointi

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[:8][2:5][-1:]
[4]
ls[:8] ----- [0,1,2,3,4,5,6,7]
ls[:8][2:5]   -----   [2,3,4]
ls[:8][2:5][-1:] ----- [4]

7. Viipaloinnin kolme parametria voivat olla myös lausekkeita

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[2+1:3*2:7%3]
[3, 4, 5]
>>> ls[3:6:1]
[3, 4, 5]
>>> ls[2:6:2]
[2, 4]

8. Viipalointi voi myös leikata muita esineitä

>>> (1,2,3,4,5,6,7,8,9)[:3]
(1, 2, 3)
>>> "ABCDEFGHIJK"[::2]
'ACEGIK'
>>> for i in range(1,100)[2::3][-10:]:
...     print(i)
...
72
75
78
81
84
87
90
93
96
99

Haastattelu kysymykset:

1. Jos alaindeksiväli ylittyy käytettäessä siivuja datan leikkaamiseen, raportoidaanko virhe?

Virhettä ei raportoida, jos se ylittää alueen, palautetaan täydellinen objekti, jos se on epäjohdonmukainen.

2. Kuinka kääntää luettelon tulostuksen pythonissa?

silmukka käänteinen

[::-1]

list.reverse()