Spajanje i spajanje nizova u Pythonu: + operatori, funkcije spajanja itd.

Poslovanje

Slijedi opis kako spojiti i spojiti string str u Pythonu.

  • Spajanje i spajanje više nizova:+,+=operater
  • Spojite i kombinirajte brojeve i nizove:+,+=operater,str(),format(),f-string
  • Spojite i kombinirajte popise (nizove) nizova u jedan niz:join()
  • Spojite i kombinirajte popise (nizove) brojeva u jedan niz:join(),str()

Spajanje i spajanje više nizova:+,+=operater

vezu:+operater

Operator ++ može se koristiti za spajanje sljedećih literala niza i varijabli niza

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

vezu:+=operater

Operator +=, kumulativni operator dodjele, također se može koristiti. Varijabla niza na lijevoj strani je povezana sa nizom na desnoj strani, te se dodjeljuje i ažurira.

s1 += s2
print(s1)
# aaabbb

Ako želite dodati niz na kraj varijable stringa, jednostavno obradite varijablu niza i bilo koji literal niza (ili drugu varijablu niza) s += operatorom.

s = 'aaa'

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

Uzastopna konkatenacija literala niza

Ako jednostavno pišete string literale jedan pored drugog, string literali će biti spojeni.

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

Prihvatljivo je imati razmak između dva retka ili obrnutu kosu crtu (smatra se nastavkom).

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

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

Postoji tehnika kojom se ovo može koristiti za pisanje dugih nizova u više redaka u kodu.

Ova metoda pisanja nije moguća za varijable niza.

# s = s1 s2 s3
# SyntaxError: invalid syntax

Brojčana i nizova konkatenacija/konkatenacija:+,+=operater,str(),format(),f-string

Operacija + drugog tipa rezultira pogreškom.

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

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

Ako želite spojiti brojčanu vrijednost (npr. cjelobrojni tip int ili tip float s pomičnim zarezom) sa nizom, pretvorite brojčanu vrijednost u vrstu niza pomoću str(), a zatim ih spojite s + operatorom (ili += operatorom ).

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

Ako želite pretvoriti format broja, kao što su nula ili decimalna mjesta, upotrijebite funkciju format() ili metodu niza 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

Naravno, također je moguće ugraditi vrijednost varijable izravno u niz bez formatiranja. Ovo je jednostavnije napisati nego koristiti operator +.

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

Pogledajte sljedeći članak za pojedinosti o tome kako odrediti format.

Od Pythona 3.6 uveden je i mehanizam nazvan f-strings (f-string), koji je čak i jednostavniji za pisanje od formata().

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

Spojite i spojite liste (nizovi) nizova:join()

Metoda stringova join() može se koristiti za spajanje popisa nizova u jedan niz.

Sljedeće je kako to napisati.

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

Pozovite metodu join() s ‘stringom za umetanje između’ i proslijedite [popis nizova za spajanje] kao argument.

Ako se koristi prazan niz, [popis nizova za spajanje] jednostavno će se spojiti, ako se koristi zarez, nizovi će biti razdvojeni zarezima, a ako se koristi znak za novi red, svaki element niza bit će pretvoren u novi red.

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

Iako je ovdje dat samo primjer popisa, drugi objekti koji se mogu ponavljati, kao što su tuple, također se mogu navesti kao argumenti za join().

Za razliku od join(), split() se koristi za cijepanje niza ograničenog određenim graničnikom i dobivanje ga kao popis.

Spojite i kombinirajte popise (nizove) brojeva kao nizove:join(),str()

Do pogreške dolazi ako je argument za join() popis čiji elementi nisu nizovi.

l = [0, 1, 2]

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

Da biste spojili popis brojeva u jedan niz, primijenite funkciju str() na svaki element u zapisu za razumijevanje popisa da biste brojeve pretvorili u niz, a zatim ih spojite pomoću join().

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

Također se može napisati kao izraz generatora, koji je generatorska verzija shvaćanja popisa. Izrazi generatora zatvoreni su u zagradama, ali zagrade se mogu izostaviti ako je izraz generatora jedini argument funkcije ili metode.

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

Izrazi generatora općenito imaju prednost korištenja manje memorije od shvaćanja popisa, ali nema posebne prednosti u korištenju izraza generatora budući da join() pretvara generatore u liste u svojoj internoj obradi. Zapravo, malo je brže koristiti shvaćanje popisa od početka.

Za više informacija o shvaćanjima popisa i izrazima generatora, pogledajte sljedeći članak.