Stringide ühendamine ja ühendamine Pythonis: + operaatorid, liitmisfunktsioonid jne.

Äri

Järgnevalt kirjeldatakse, kuidas ühendada ja liita string str Pythonis.

  • Mitme stringi ühendamine ja ühendamine: +,+=operaator
  • Numbrite ja stringide ühendamine ja kombineerimine: +,+=operaator,str(),format(),f-string
  • Stringide loetelude (massiivid) ühendamine ja ühendamine üheks stringiks:join()
  • Numbrite loetelude (massiivid) ühendamine ja kombineerimine üheks stringiks:join(),str()

Mitme stringi ühendamine ja ühendamine: +, +=operaator

ühendus: +operaator

Operaatorit ++ saab kasutada järgmiste string literaalide ja string muutujate ühendamiseks

  • '…'
  • “…”
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

ühendus: +=operaator

Samuti võib kasutada kumulatiivset määramisoperaatorit +=. Vasakpoolne string-muutuja konkateeritakse parempoolse stringiga, omistatakse ja uuendatakse.

s1 += s2
print(s1)
# aaabbb

Kui soovite lisada string-muutuja lõppu stringi, töötle lihtsalt string-muutujat ja mis tahes string-literaali (või teist string-muutujat) operaatoriga +=.

s = 'aaa'

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

Stringliteraalide järjestikune ühendamine

Kui te lihtsalt kirjutate stringiliteraalid kõrvuti, siis stringiliteraalid ühendatakse.

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

Kahe rea vahel on lubatud kasutada tühikut või kaldkriipsu reavahet (seda loetakse jätkuks).

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

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

On olemas tehnika, mida saab kasutada pikkade stringide kirjutamiseks mitmele reale koodis.

See kirjutamismeetod ei ole võimalik string-muutujate puhul.

# s = s1 s2 s3
# SyntaxError: invalid syntax

Numbrite ja stringide ühendamine\konkatenatsioon: +,+=operaator,str(),format(),f-string

Teist tüüpi + operatsioon põhjustab vea.

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

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

Kui soovite liita numbrilist väärtust (nt täisarvu tüüpi int või ujukoma tüüpi float) stringiga, teisendage numbriline väärtus stringitüübiks funktsiooniga str() ja seejärel liita need operaatoriga + (või += operaatoriga).

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

Kui soovite teisendada numbri formaati, näiteks nullide või kümnendkohtade täitmist, kasutage funktsiooni format() või stringi meetodit 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

Loomulikult on võimalik muutuja väärtust ka otse stringi ilma vormindamiseta sisse põimida. Seda on lihtsam kirjutada kui + operaatorit kasutades.

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

Üksikasjalikumat teavet formaadi määramise kohta leiate järgmisest artiklist.

Alates Python 3.6 on kasutusele võetud ka mehhanism nimega f-string (f-string), mida on isegi lihtsam kirjutada kui 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

Stringide loetelude (massiivid) ühendamine ja liitmine: join()

Stringimeetodit join() saab kasutada stringide loendi ühendamiseks üheks stringiks.

Järgnevalt on kirjeldatud, kuidas seda kirjutada.

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

Kutsu meetodit join() koos 'string to insert between' ja anna argumendiks [list of strings to concatenate].

Kui kasutatakse tühja stringi, siis [ühendatavate stringide loend] lihtsalt ühendatakse, kui kasutatakse koma, siis eraldatakse stringid komadega, ja kui kasutatakse newline-märki, siis iga stringi element eraldatakse newline'iga.

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

Kuigi siin on toodud ainult loetelu näide, saab join() argumentidena esitada ka teisi iteratiivseid objekte, näiteks tupleid.

Erinevalt join() funktsioonist kasutatakse funktsiooni split() selleks, et jagada konkreetse eraldajaga piiratud string ja saada see loeteluna.

Numbrite loetelude (massiivid) ühendamine ja kombineerimine stringidena: join(),str()

Tekib viga, kui join() argument on nimekiri, mille elemendid ei ole stringid.

l = [0, 1, 2]

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

Numbrite loendi ühendamiseks üheks stringiks tuleb rakendada funktsiooni str() loendi iga elemendi suhtes, et teisendada numbrid stringiks, ja seejärel liita need funktsiooniga join().

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

Seda saab kirjutada ka generaatorväljendina, mis on loendi mõistete generaatorversioon. Generaatorväljendid on suletud sulgudesse, kuid sulgud võib ära jätta, kui generaatorväljend on funktsiooni või meetodi ainus argument.

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

Generaatorväljendite eeliseks on üldiselt see, et nad kasutavad vähem mälu kui loendi mõisted, kuid generaatorväljendite kasutamisel ei ole erilist eelist, kuna join() konverteerib generaatorid oma sisemises töötlemises loenditeks. Tegelikult on algusest peale veidi kiirem kasutada nimekirjade mõistmist.

Lisateavet loendi mõistete ja generaatorväljendite kohta leiate järgmisest artiklist.