Merkkijonojen ketjuttaminen ja yhdistäminen Pythonissa: +-operaattorit, yhdistämisfunktiot jne.

liiketoiminta

Seuraavassa on kuvaus siitä, miten ketjutetaan ja liitetään merkkijono str Pythonissa.

  • Useiden merkkijonojen ketjuttaminen ja yhdistäminen: +,+=operaattori
  • Numeroiden ja merkkijonojen ketjuttaminen ja yhdistäminen: +,+=operaattori,str(),format(),f-string
  • Yhdistää ja yhdistää merkkijonojen luetteloita (matriiseja) yhdeksi merkkijonoksi.:join()
  • Numeroluetteloiden (taulukoiden) yhdistäminen ja yhdistäminen yhdeksi merkkijonoksi.:join(),str()

Useiden merkkijonojen ketjuttaminen ja yhdistäminen: +, +=operaattori

yhteys: +operaattori

Operaattoria ++ voidaan käyttää seuraavien merkkijonojen ja merkkijonomuuttujien ketjuuntamiseen

  • '…'
  • ”…”
s = 'aaa' + 'bbb' + 'ccc'
print(s)
# aaabbbccc

s1 = 'aaa'
s2 = 'bbb'
s3 = 'ccc'

s = s1 + s2 + s3
print(s)
# aaabbbccc

s = s1 + s2 + s3 + 'ddd'
print(s)
# aaabbbcccddd

yhteys: +=operaattori

Myös +=-operaattoria, kumulatiivista osoitusoperaattoria, voidaan käyttää. Vasemmanpuoleinen merkkijonomuuttuja ketjutetaan oikeanpuoleisen merkkijonon kanssa, osoitetaan ja päivitetään.

s1 += s2
print(s1)
# aaabbb

Jos haluat lisätä merkkijonon merkkijonomuuttujan loppuun, käsittele merkkijonomuuttujaa ja mitä tahansa merkkijonon literaalia (tai toista merkkijonomuuttujaa) +=-operaattorilla.

s = 'aaa'

s += 'xxx'
print(s)
# aaaxxx

Merkkijonojen literaalien peräkkäinen ketjutus

Jos kirjoitat merkkijonokirjaimet vierekkäin, merkkijonokirjaimet ketjutetaan.

s = 'aaa''bbb''ccc'
print(s)
# aaabbbccc

On hyväksyttävää, että kahden rivin välissä on välilyönti tai rivinvaihto backslash-viivalla (jota pidetään jatkona).

s = 'aaa'  'bbb'    'ccc'
print(s)
# aaabbbccc

s = 'aaa'\
    'bbb'\
    'ccc'
print(s)
# aaabbbccc

On olemassa tekniikka, jolla tätä voidaan käyttää pitkien merkkijonojen kirjoittamiseen usealle riville koodissa.

Tämä kirjoitustapa ei ole mahdollinen merkkijonomuuttujille.

# s = s1 s2 s3
# SyntaxError: invalid syntax

Numeroiden ja merkkijonojen ketjuttaminen\konkatenaatio: +,+=operaattori,str(),format(),f-string

Eri tyyppinen +-operaatio johtaa virheeseen.

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

# s = s1 + i
# TypeError: must be str, not int

Jos haluat ketjuttaa numeerisen arvon (esim. kokonaislukutyyppi int tai liukulukutyyppi float) merkkijonon kanssa, muunna numeerinen arvo merkkijonotyypiksi komennolla str() ja ketjuta ne sitten +-operaattorilla (tai +=-operaattorilla).

s = s1 + '_' + str(i) + '_' + s2 + '_' + str(f)
print(s)
# aaa_100_bbb_0.25

Jos haluat muuntaa luvun muodon, kuten nollatäytön tai desimaalien, käytä format()-funktiota tai merkkijonomenetelmää format().

s = s1 + '_' + format(i, '05') + '_' + s2 + '_' + format(f, '.5f')
print(s)
# aaa_00100_bbb_0.25000

s = '{}_{:05}_{}_{:.5f}'.format(s1, i, s2, f)
print(s)
# aaa_00100_bbb_0.25000

Muuttujan arvo voidaan tietysti myös upottaa suoraan merkkijonoon ilman muotoilua. Tämä on yksinkertaisempaa kirjoittaa kuin +-operaattorin käyttö.

s = '{}_{}_{}_{}'.format(s1, i, s2, f)
print(s)
# aaa_100_bbb_0.25

Katso seuraavasta artikkelista lisätietoja muodon määrittämisestä.

Python 3.6:sta lähtien on otettu käyttöön myös mekanismi nimeltä f-string (f-string), joka on vielä yksinkertaisempi kirjoittaa kuin format().

s = f'{s1}_{i:05}_{s2}_{f:.5f}'
print(s)
# aaa_00100_bbb_0.25000

s = f'{s1}_{i}_{s2}_{f}'
print(s)
# aaa_100_bbb_0.25

Merkkijonojen listojen (matriisien) ketjuttaminen ja yhdistäminen: join()

String-metodilla join() voidaan ketjuttaa merkkijonojen luettelo yhdeksi merkkijonoksi.

Se kirjoitetaan seuraavasti.

'String to be inserted between'.join([List of strings to be concatenated])

Kutsu join()-metodia, jossa on 'merkkijono, jonka väliin lisätään', ja anna argumenttina [luettelo ketjutettavista merkkijonoista].

Jos käytetään tyhjää merkkijonoa, [luettelo yhdistettävistä merkkijonoista] yksinkertaisesti yhdistetään, jos käytetään pilkkua, merkkijonot erotetaan pilkulla, ja jos käytetään rivinvaihtomerkkiä, jokainen merkkijonoelementti rivinvaihdetaan.

l = ['aaa', 'bbb', 'ccc']

s = ''.join(l)
print(s)
# aaabbbccc

s = ','.join(l)
print(s)
# aaa,bbb,ccc

s = '-'.join(l)
print(s)
# aaa-bbb-ccc

s = '\n'.join(l)
print(s)
# aaa
# bbb
# ccc

Vaikka tässä annetaan vain esimerkki listasta, join()-oliolle voidaan antaa argumentteina myös muita iteroitavia objekteja, kuten tupleja.

Toisin kuin join()-toimintoa, split()-toimintoa käytetään jakamaan tietyllä erottimella rajattu merkkijono ja saamaan se listana.

Numeroluetteloiden (matriisien) ketjuttaminen ja yhdistäminen merkkijonoina.: join(),str()

Tapahtuu virhe, jos join():n argumentti on lista, jonka elementit eivät ole merkkijonoja.

l = [0, 1, 2]

# s = '-'.join(l)
# TypeError: sequence item 0: expected str instance, int found

Jos haluat yhdistää numeroluettelon yhdeksi merkkijonoksi, käytä str()-funktiota jokaiseen luettelon elementtiin, jotta numerot voidaan muuntaa merkkijonoksi, ja yhdistä ne sitten join()-funktiolla.

s = '-'.join([str(n) for n in l])
print(s)
# 0-1-2

Se voidaan kirjoittaa myös generaattorilausekkeena, joka on generaattoriversio listojen ymmärrettävyydestä. Generaattorilausekkeet suljetaan sulkuihin, mutta sulut voidaan jättää pois, jos generaattorilauseke on funktion tai metodin ainoa argumentti.

s = '-'.join((str(n) for n in l))
print(s)
# 0-1-2

s = '-'.join(str(n) for n in l)
print(s)
# 0-1-2

Generaattorilausekkeiden etuna on yleensä se, että ne käyttävät vähemmän muistia kuin listojen ymmärtäminen, mutta generaattorilausekkeiden käytöstä ei ole erityistä etua, koska join() muuntaa generaattorit listoiksi sisäisessä käsittelyssään. Itse asiassa on hieman nopeampaa käyttää alusta alkaen listakäsitteitä.

Lisätietoa listayhteenvedoista ja generaattorilausekkeista on seuraavassa artikkelissa.

Copied title and URL