Concatenação e junção de cordas em Python: + operadores, juntar funções, etc.

O negócio

Segue-se uma descrição de como concatenar e juntar cordelinhos em Python.

  • Concatenação e fusão de múltiplas cordas: +,+=operador
  • Concatenar e combinar números e cordas: +,+=operador,str(),format(),f-string
  • Concatenar e combinar listas (matrizes) de cordas numa única corda:join()
  • Concatenar e combinar listas (matrizes) de números numa única cadeia:join(),str()

Concatenação e fusão de múltiplas cordas: +, +=operador

ligação: +operador

O operador ++ pode ser utilizado para concatenar as seguintes literais e variáveis de corda

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

ligação: +=operador

O operador +=, um operador de atribuição cumulativa, também pode ser utilizado. A variável string do lado esquerdo é concatenada com a string do lado direito, e é atribuída e actualizada.

s1 += s2
print(s1)
# aaabbb

Se quiser adicionar uma string ao fim de uma variável string, basta processar a variável string e qualquer string literal (ou outra variável string) com o operador +=.

s = 'aaa'

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

Concatenação consecutiva de literais de cordas

Se simplesmente escrever literalmente a corda lado a lado, a corda literal será concatenada.

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

É aceitável ter um espaço entre duas linhas ou uma quebra de linha (considerada uma continuação).

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

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

Há uma técnica para utilizar isto para escrever longas cordas em múltiplas linhas no código.

Este método de escrita não é possível para variáveis de cadeia.

# s = s1 s2 s3
# SyntaxError: invalid syntax

Concatenação numérica e de cordas\concatenação: +,+=operador,str(),format(),f-string

Uma operação + de um tipo diferente resulta num erro.

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

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

Se quiser concatenar um valor numérico (p. ex., integer tipo int ou floating-point type float) com uma string, converta o valor numérico para um tipo de string com str() e depois concatene-os com o operador + (ou += operador).

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

Se quiser converter o formato de um número, tal como o preenchimento zero ou casas decimais, utilize a função format() ou o formato do método de cadeia().

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

Naturalmente, também é possível incorporar o valor de uma variável directamente numa cadeia sem formatação. Isto é mais simples de escrever do que utilizar o operador +.

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

Ver o artigo seguinte para detalhes sobre como especificar o formato.

Desde Python 3.6, foi também introduzido um mecanismo chamado f-string (f-string), que é ainda mais simples de escrever do que de formatar().

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

Concatenar e juntar listas (arrays) de cordas: join()

O método string join() pode ser usado para concatenar uma lista de cordas numa única corda.

O seguinte é como escrevê-lo.

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

Método call join() com 'string to insert between' e passar [lista de strings a concatenar] como argumento.

Se for utilizada uma corda vazia, [lista de cordas a serem concatenadas] será simplesmente concatenada, se for utilizada uma vírgula, as cordas serão separadas por vírgula, e se for utilizada uma nova linha de caracteres, cada elemento da corda será recriado.

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

Embora apenas um exemplo de uma lista seja dado aqui, outros objectos iteráveis como tuplos também podem ser especificados como argumentos para aderir().

Ao contrário de join(), split() é utilizado para dividir uma cadeia delimitada por um delimitador específico e obtê-lo como uma lista.

Concatenar e combinar listas (arrays) de números como cordas: join(),str()

Ocorre um erro se o argumento para aderir() for uma lista cujos elementos não são strings.

l = [0, 1, 2]

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

Para concatenar uma lista de números numa única cadeia, aplicar a função str() a cada elemento da notação de compreensão da lista para converter os números numa cadeia, e depois juntá-los com join().

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

Também pode ser escrito como uma expressão geradora, que é uma versão geradora de compreensões de listas. As expressões geradoras são incluídas entre parênteses, mas os parênteses podem ser omitidos se a expressão geradora for o único argumento para uma função ou método.

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

As expressões geradoras têm geralmente a vantagem de utilizar menos memória do que as compreensões de listas, mas não há nenhuma vantagem particular em utilizar expressões geradoras uma vez que o join() converte os geradores em listas no seu processamento interno. De facto, é ligeiramente mais rápido utilizar as compreensões de listas desde o início.

Para mais informações sobre a compreensão da lista e expressões geradoras, ver o artigo seguinte.