Конкатениране и обединяване на низове в Python: + оператори, функции за обединяване и др.

Бизнес

По-долу е описано как да конкатенирате и обединявате низове str в Python.

  • Конкатениране и обединяване на множество низове: +,+=оператор
  • Конкатениране и комбиниране на числа и низове: +,+=оператор,str(),format(),f-стринг
  • Конкатениране и комбиниране на списъци (масиви) от низове в един низ:join()
  • Конкатениране и комбиниране на списъци (масиви) от числа в един низ:join(),str()

Конкатениране и обединяване на множество низове: +, +=оператор

връзка: +оператор

Операторът ++ може да се използва за конкатенация на следните символни низове и низови променливи

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

връзка: +=оператор

Може да се използва и операторът +=, който е оператор за кумулативно присвояване. Променливата с низ от лявата страна се конкатенира с низ от дясната страна и се присвоява и актуализира.

s1 += s2
print(s1)
# aaabbb

Ако искате да добавите низ в края на променлива с низ, просто обработете променливата с низ и всеки литерал с низ (или друга променлива с низ) с оператора +=.

s = 'aaa'

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

Последователно конкатенация на символни низове

Ако просто напишете символни низове един до друг, символните низове ще бъдат конкатенирани.

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

Допустимо е между два реда да има интервал или прекъсване на реда с обратна наклонена черта (счита се за продължение).

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

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

Съществува техника за използване на този метод за записване на дълги низове на няколко реда в кода.

Този метод на запис не е възможен за символни променливи.

# s = s1 s2 s3
# SyntaxError: invalid syntax

Конкатенация на числа и низове\конкатенация: +,+=оператор,str(),format(),f-стринг

Операция + от различен тип води до грешка.

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

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

Ако искате да свържете числова стойност (например тип цяло число int или тип плаваща запетая float) с низ, преобразувайте числовата стойност в тип низ с помощта на str() и след това ги свържете с оператора + (или +=).

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

Ако искате да преобразувате формата на дадено число, като например попълване с нула или десетични знаци, използвайте функцията format() или метода 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

Разбира се, възможно е също така да вградите стойността на променлива директно в низ без форматиране. Това е по-просто за писане, отколкото използването на оператора +.

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

Вижте следната статия за подробности относно това как да зададете формата.

От версия 3.6 на Python е въведен и механизъм, наречен f-strings (f-string), който е още по-прост за писане от 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

Конкатениране и обединяване на списъци (масиви) от низове: join()

Методът за обединяване на низове join() може да се използва за обединяване на списък от низове в един низ.

По-долу е описано как да го напишете.

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

Извикайте метода join() с 'низ за вмъкване между' и подайте [списък с низове за конкатенация] като аргумент.

Ако се използва празен низ, [списък с низове за конкатениране] ще бъде просто конкатениран, ако се използва запетая, низовете ще бъдат разделени със запетая, а ако се използва символ за нов ред, всеки елемент на низа ще бъде нов ред.

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

Въпреки че тук е даден само пример за списък, като аргументи на join() могат да се задават и други итерабилни обекти, например кортежи.

За разлика от функцията join(), функцията split() се използва за разделяне на низ, ограничен от определен разделител, и получаването му като списък.

Конкатениране и комбиниране на списъци (масиви) от числа като низове: join(),str()

Възниква грешка, ако аргументът на join() е списък, чиито елементи не са низове.

l = [0, 1, 2]

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

За да обедините списък от числа в един низ, приложете функцията str() към всеки елемент от списъка, за да преобразувате числата в низ, и след това ги обединете с функцията join().

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

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

Предимството на генераторните изрази обикновено е, че използват по-малко памет, отколкото списъците, но използването на генераторни изрази няма особено предимство, тъй като join() преобразува генераторите в списъци при вътрешната си обработка. Всъщност от самото начало е малко по-бързо да се използват списъчни разбирания.

За повече информация относно разбирането на списъци и генераторните изрази вижте следната статия.

Copied title and URL