Poniżej opisano sposób konkatenacji i łączenia łańcuchów str w języku Python.
- Konkatenacja i łączenie wielu ciągów znaków:
+
,+=
operator - Konkatenacja i łączenie liczb i ciągów znaków:
+
,+=
operator,str()
,format()
,f-string - Konkatenacja i łączenie list (tablic) ciągów znaków w jeden ciąg znaków:
join()
- Konkatenuj i łącz listy (tablice) liczb w jeden ciąg znaków:
join()
,str()
Konkatenacja i łączenie wielu ciągów znaków: +, +=operator
połączenie: +operator
Operator ++ może być używany do konkatenacji następujących literałów łańcuchowych i zmiennych łańcuchowych
- '…'
- „…”
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
połączenie: +=operator
Można również użyć operatora +=, będącego operatorem przypisania kumulatywnego. Zmienna łańcuchowa po lewej stronie jest konkatenowana z łańcuchem po prawej stronie, a następnie przypisywana i aktualizowana.
s1 += s2
print(s1)
# aaabbb
Aby dodać łańcuch do końca zmiennej łańcuchowej, wystarczy przetworzyć zmienną łańcuchową i dowolny dosłowny łańcuch (lub inną zmienną łańcuchową) za pomocą operatora +=.
s = 'aaa'
s += 'xxx'
print(s)
# aaaxxx
Kolejna konkatenacja literałów łańcuchowych
Jeśli po prostu napiszesz obok siebie literały łańcuchowe, zostaną one połączone w jedną całość.
s = 'aaa''bbb''ccc'
print(s)
# aaabbbccc
Dopuszczalne jest umieszczenie spacji między dwoma wierszami lub przerwanie wiersza odwrotnym ukośnikiem (uważane za kontynuację).
s = 'aaa' 'bbb' 'ccc'
print(s)
# aaabbbccc
s = 'aaa'\
'bbb'\
'ccc'
print(s)
# aaabbbccc
Istnieje technika pozwalająca wykorzystać to do pisania długich łańcuchów w wielu wierszach kodu.
- Powiązane artykuły:Zapisywanie długich ciągów znaków w wielu wierszach w Pythonie
Ta metoda zapisu nie jest możliwa w przypadku zmiennych łańcuchowych.
# s = s1 s2 s3
# SyntaxError: invalid syntax
Konkatenacja liczb i ciągów znaków: +,+=operator,str(),format(),f-string
Operacja + innego typu powoduje wystąpienie błędu.
s1 = 'aaa'
s2 = 'bbb'
i = 100
f = 0.25
# s = s1 + i
# TypeError: must be str, not int
Jeśli chcesz połączyć wartość liczbową (np. typu całkowitego int lub zmiennoprzecinkowego float) z łańcuchem znaków, przekonwertuj wartość liczbową na typ łańcuchowy za pomocą funkcji str(), a następnie połącz je za pomocą operatora + (lub operatora +=).
s = s1 + '_' + str(i) + '_' + s2 + '_' + str(f)
print(s)
# aaa_100_bbb_0.25
Jeśli chcesz przekonwertować format liczby, np. wypełnienie zera lub miejsca dziesiętne, użyj funkcji format() lub metody łańcuchowej 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
Oczywiście możliwe jest również osadzenie wartości zmiennej bezpośrednio w łańcuchu znaków bez formatowania. Jest to prostsze do napisania niż użycie operatora +.
s = '{}_{}_{}_{}'.format(s1, i, s2, f)
print(s)
# aaa_100_bbb_0.25
Szczegółowe informacje na temat określania formatu można znaleźć w poniższym artykule.
- Powiązane artykuły:Konwersja formatu w Pythonie, format (wypełnianie 0, notacja wykładnicza, szesnastkowa itd.)
Od wersji Pythona 3.6 wprowadzono również mechanizm zwany f-string (f-string), który jest jeszcze prostszy do napisania niż 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
Konkatenacja i łączenie list (tablic) ciągów znaków: join()
Metoda join() może służyć do łączenia listy ciągów w jeden ciąg.
Poniżej przedstawiono sposób jego zapisu.
'String to be inserted between'.join([List of strings to be concatenated])
Wywołaj metodę join() z 'ciągiem do wstawienia między' i przekaż [listę ciągów do złączenia] jako argument.
Jeśli zostanie użyty pusty łańcuch, to [lista łańcuchów do konkatenacji] zostanie po prostu konkatenowana, jeśli zostanie użyty przecinek, to łańcuchy zostaną rozdzielone przecinkami, a jeśli zostanie użyty znak nowej linii, to każdy element łańcucha zostanie podkreślony nową linią.
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
Chociaż podany jest tu tylko przykład listy, jako argumenty join() można podać również inne obiekty iterowalne, takie jak tuple.
W przeciwieństwie do join(), split() służy do podziału łańcucha ograniczonego określonym ogranicznikiem i uzyskania go w postaci listy.
Konkatenacja i łączenie list (tablic) liczb jako ciągów znaków: join(),str()
Błąd występuje, jeśli argumentem funkcji join() jest lista, której elementy nie są łańcuchami.
l = [0, 1, 2]
# s = '-'.join(l)
# TypeError: sequence item 0: expected str instance, int found
Aby połączyć listę liczb w jeden ciąg znaków, należy zastosować funkcję str() do każdego elementu listy, aby przekształcić liczby w ciąg znaków, a następnie połączyć je za pomocą funkcji join().
s = '-'.join([str(n) for n in l])
print(s)
# 0-1-2
Można je również zapisać jako wyrażenie generatora, które jest generatorową wersją list comprehensions. Wyrażenia generatora są ujęte w nawiasy, ale nawiasy można pominąć, jeśli wyrażenie generatora jest jedynym argumentem funkcji lub metody.
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
Wyrażenia generatorów mają tę zaletę, że zużywają mniej pamięci niż listy, ale nie ma żadnej szczególnej korzyści z używania wyrażeń generatorów, ponieważ join() konwertuje generatory na listy w swoim wewnętrznym przetwarzaniu. W rzeczywistości nieco szybciej jest od początku używać list comprehensions.
Więcej informacji na temat list comprehensions i wyrażeń generatorów można znaleźć w poniższym artykule.
- Powiązane artykuły:Jak korzystać z list comprehensions w Pythonie