16 One-Liners úteis do Python para simplificar tarefas comuns

Olhando para escrever código elegante e Pythonic? Aqui está uma lista de one-liners úteis do Python para executar tarefas simples.

Se você for um programador Python iniciante, gastará tempo entendendo estruturas básicas de dados, como listas e strings. E algumas operações nessas estruturas de dados podem ser obtidas por meio de trechos de código concisos de uma linha.

Como programador, você deve priorizar a legibilidade e a manutenção em vez de tornar o código mais curto. Mas Python é fácil de criar one-liners que seguem boas práticas de codificação.

Neste artigo, vamos nos concentrar em one-liners para listas simples e tarefas de processamento de strings em Python.

Vamos começar!

Gerar uma lista de números

A maneira mais simples de gerar uma lista de números é usando a função range(). A função range() retorna um objeto range que você pode converter em uma lista. Usar range(num) dará a sequência 0, 1, 2,.., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Mais sobre como usar a função range()

Você também pode usar a função range() junto com um valor de etapa opcional. Portanto, range (start, end, step) dará a sequência start, start + step, start + 2*step, e assim por diante. O último valor será start + k*step tal que (start + k*step) < end and (start + (k+1)*step) > end.

Encontre os valores máximo e mínimo em uma lista

Você pode usar as funções internas max e min para calcular os elementos máximo e mínimo em uma lista, respectivamente.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Nota sobre Atribuição Múltipla

Observe que atribuímos valores a min_elt e max_elt em uma única instrução de atribuição. O Python suporta essa atribuição múltipla. E isso pode ser útil ao descompactar iteráveis ​​e atribuir valores a várias variáveis ​​ao mesmo tempo.

Remover duplicatas de uma lista

Outra operação comum é remover duplicatas das listas do Python. Isso é necessário quando você precisa trabalhar apenas com os valores exclusivos. A maneira mais simples de fazer isso é converter a lista em um conjunto.

Um conjunto é uma estrutura de dados integrada cujos elementos são todos exclusivos e passíveis de hash.

>>> nums1 = [2,4,7,9,7,10]

Em nums1, o elemento 7 ocorre duas vezes. A conversão em um conjunto removerá a duplicata (aqui, 7), deixando-nos com uma lista de valores exclusivos.

Como ainda precisamos trabalhar com a lista, converteremos o conjunto de volta em uma lista. Esta operação pode ser realizada com a seguinte linha de código:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Para saber mais sobre outras técnicas para remover duplicatas de listas do Python, confira este guia.

Contar ocorrências em uma lista

Para contar o número de vezes que um elemento ocorre em uma lista, você pode usar o método embutido count(). list.count(elt) retorna o número de vezes que elt ocorre na lista.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Aqui, 7 ocorre uma vez na lista nums, então o método count() retorna 1.

>>> nums.count(7)
1

Verifique se todos os elementos da lista satisfazem uma condição

Para verificar se todos os elementos em uma lista satisfazem uma condição, você pode usar a função all() integrada do Python.

A função all() aceita um iterável como argumento e retorna True se todos os elementos no iterável forem avaliados como True (ou verdadeiros).

Aqui, gostaríamos de verificar se todos os elementos da lista nums2 são ímpares.

>>> nums2 = [3,4,7,11,21,67,12]

Podemos usar a compreensão de lista para construir uma lista de booleanos e podemos passar essa lista como argumento para a função all().

Aqui, num%2!=0 será False para os elementos 4 e 12 que são pares. Portanto, a lista de booleanos construída usando a expressão de compreensão de lista contém False (e all(list) retorna False).

>>> all([num%2!=0 for num in nums2])
False

💡 É importante observar que todas([]) (all(any-vazio-iterável) retorna True.

Verifique se algum elemento da lista satisfaz uma condição

Para verificar se algum elemento em uma lista satisfaz uma condição, você pode usar a função any(). any(some-list) retorna True se pelo menos um elemento for avaliado como True.

>>> nums2 = [3,4,7,11,21,67,12]

Como no exemplo anterior, usamos compreensão de lista para obter uma lista de booleanos. A lista nums contém números pares. Portanto, a função any() retorna True.

>>> any([num%2 for num in nums2])
True

Inverter uma String

Em Python, as strings são imutáveis, portanto, quando você deseja inverter uma string, só pode obter uma cópia invertida da string. Existem duas abordagens comuns — ambas podem ser escritas como one-liners do Python — que usam divisão de strings e funções internas.

Usando o corte de strings

A fatia de string com valores negativos de step retorna uma fatia da string começando do final. A sintaxe é string[start:stop:step]. Então, o que retorna a configuração da etapa -1 e ignorando os índices de início e parada?

Ele retorna uma cópia da string, começando no final da string – incluindo todos os caracteres.

>>> str1[::-1]
'olleh'

Usando a função reverse()

A função integrada reversed() retorna um iterador reverso em uma sequência.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Você pode usá-lo em conjunto com o método join(), conforme mostrado:

>>> ''.join(reversed(str1))
'olleh'

Converter uma String em uma Lista de Caracteres

Suponha que gostaríamos de dividir uma string em uma lista de caracteres. Podemos fazer isso usando a expressão de compreensão de lista.

>>> str1 = 'hello'

As compreensões de lista são um dos one-liners mais poderosos em Python.

📒 Saiba mais sobre compreensão de lista em Python.

Fazemos um loop pela string e coletamos cada caractere.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Para dividir uma string mais longa em uma lista de strings em cada ocorrência de espaço em branco, você pode usar o método split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Já vimos como usar a compreensão de lista para dividir uma string em uma lista de caracteres. Nesse exemplo, coletamos todos os caracteres fazendo um loop na string.

Aqui, precisamos percorrer a string e coletar apenas os dígitos. Então, como fazemos isso?

  • Podemos definir a condição de filtragem na expressão de compreensão da lista usando o método isdigit().
  • c.isdigit() retorna True se c for um dígito; caso contrário, retorna False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Verifique se uma string começa com uma substring específica

Para verificar se uma string começa com uma substring específica, você pode usar o método de string startswith(). str1.startswith(substring) retorna True se str1 começa com substring. Caso contrário, retorna Falso.

Aqui estão alguns exemplos:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Verifique se uma string termina com uma substring específica

Como você deve ter adivinhado, para verificar se uma string termina com uma determinada substring, você pode usar o método endswith().

>>> str5 = 'python'
>>> str5.endswith('on')
True

Também podemos usar o método string dentro de uma expressão de compreensão de lista para obter ends_with, uma lista de booleanos.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Junte elementos de uma lista em uma string

Já vimos como dividir uma string em uma lista de caracteres. Agora, como fazemos a operação inversa de unir os elementos de uma lista em uma string?

Para fazer isso, você pode usar o método de string join() com a sintaxe: separator.join(some-list).

Gostaríamos apenas de combinar os elementos da lista em uma única string; não precisamos de nenhum separador. Portanto, definimos o separador como uma string vazia.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Criar um dicionário Python

Assim como as compreensões de lista podem nos ajudar a construir novas listas a partir de iteráveis ​​existentes, as compreensões de dicionário podem nos ajudar a construir novos dicionários a partir de iteráveis ​​existentes.

As compreensões de dicionário do Python são frases simples poderosas que podem ajudar a construir um dicionário em tempo real.

Aqui, temos nomes que é uma lista de strings.

>>> names = ['Joe','Amy','Jake','Florence']

Criamos names_d, um dicionário contendo strings de nome como chaves e os comprimentos das strings como valor.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Atribuir valores condicionalmente a variáveis

Às vezes, pode ser necessário atribuir valores a variáveis ​​dependendo de uma condição específica.

Por exemplo, você pode ler na entrada do usuário, digamos, a idade do indivíduo. E dependendo do valor de entrada, você pode decidir se eles podem ou não participar de uma festa.

Para fazer essa atribuição condicional em Python, você pode escrever o seguinte one-liner usando o operador ternário.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Saiba mais sobre o operador ternário em Python.

Gerar Todas as Permutações

Permutação refere-se a um possível arranjo de elementos em um grupo. Se houver n elementos únicos em um grupo, haverá n! maneiras possíveis de organizá-los – e, portanto, n! permutações.

Vamos usar as seguintes letras de lista:

>>> letters = ['a','b','c']

Você pode usar permutações do módulo itertools para gerar todas as permutações possíveis do iterável fornecido.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Como visto, usando permutations(iterable) retorna um objeto de permutação que podemos percorrer usando um loop for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Mas podemos reescrevê-lo como uma expressão de uma linha convertendo o objeto de permutação em uma lista:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Aqui, existem três elementos únicos e 3!=6 permutações possíveis.

Gerar subconjuntos de uma lista

Às vezes, pode ser necessário construir todos os subconjuntos possíveis de um tamanho específico a partir de uma lista ou outros iteráveis. Vamos usar a lista de letras e obter todas as sublistas de tamanho 2.

Para isso, podemos usar combinações do módulo itertools, assim:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Conclusão

Neste tutorial, examinamos one-liners úteis do Python para executar operações comuns em listas e strings. Também aprendemos one-liners como lista Python e compreensões de dicionário e como usá-los em conjunto com funções internas para executar as tarefas desejadas.

Como próximo passo, confira esta lista de projetos Python amigáveis ​​para iniciantes.