41 perguntas sobre manipulação de strings em Python

Comecei a manter uma lista das funções mais usadas, resolvendo problemas algorítmicos no LeetCode e no HackerRank.

Ser um bom programador não significa lembrar de todas as funções internas de uma determinada linguagem. Mas isso não significa que a memorização deles seja inútil. Especialmente - quando se trata de se preparar para uma entrevista.

Hoje eu quero compartilhar com todos que querem minha cábula para trabalhar com strings em Python. Eu o projetei como uma lista de perguntas, que uso para autoteste. Embora essas perguntas não sejam atraídas para as tarefas completas oferecidas nas entrevistas, o desenvolvimento delas o ajudará a resolver problemas reais de programação.



1. Como verificar a identidade de dois objetos?


O operador isretornará Truese uma referência à mesma área de memória for escrita em duas variáveis. É disso que estamos falando quando falamos sobre a "identidade dos objetos".

Não confunda ise ==. O operador ==verifica apenas a igualdade de objetos.

animals           = ['python','gopher']
more_animals      = animals
print(animals == more_animals) #=> True
print(animals is more_animals) #=> True
even_more_animals = ['python','gopher']
print(animals == even_more_animals) #=> True
print(animals is even_more_animals) #=> False

Preste atenção ao fato de que animalseles even_more_animalsnão são idênticos, embora sejam iguais um ao outro.

Além disso, há uma função id()que retorna o identificador do endereço de memória associado ao nome da variável. Quando essa função é chamada, o mesmo identificador será retornado para dois objetos idênticos.

name = 'object'
id(name)
#=> 4408718312

2. Como verificar se todas as palavras de uma linha começam com uma letra maiúscula?


Existe um método de string istitle()que verifica se cada palavra em uma string começa com uma letra maiúscula.

print( 'The Hilton'.istitle() ) #=> True
print( 'The dog'.istitle() ) #=> False
print( 'sticky rice'.istitle() ) #=> False

3. Como verificar uma string em busca de outra string?


Existe uma instrução inque retornará Truese a sequência contiver a sequência de pesquisa.

print( 'plane' in 'The worlds fastest plane' ) #=> True
print( 'car' in 'The worlds fastest plane' ) #=> False

4. Como encontrar o índice da primeira ocorrência de uma substring em uma string?


Existem dois métodos que retornam o índice da primeira ocorrência de uma substring em uma string. Isto é find()e index(). Cada um deles tem certos recursos.

O método find()retornará -1se a substring necessária na string não for encontrada.

'The worlds fastest plane'.find('plane') #=> 19
'The worlds fastest plane'.find('car') #=> -1

Um método index()em tal situação gera um erro ValueError.

'The worlds fastest plane'.index('plane') #=> 19
'The worlds fastest plane'.index('car') #=> ValueError: substring not found

5. Como contar o número de caracteres em uma string?


A função len()retorna o comprimento da string.

len('The first president of the organization..') #=> 41

6. Como contar quantas vezes um determinado caractere ocorre em uma string?


O método count()que retorna o número de ocorrências na sequência do caractere especificado nos ajudará a responder a esta pergunta .

'The first president of the organization..'.count('o') #=> 3

7. Como tornar o primeiro caractere de uma string uma letra maiúscula?


A fim de fazer isso, você pode usar o método capitalize().

'florida dolphins'.capitalize() #=> 'Florida dolphins'

8. O que são linhas f e como usá-los?


O Python 3.6 apresenta um novo recurso, as chamadas "strings-f". Seu uso simplifica bastante a interpolação de strings. O uso de linhas f se assemelha à aplicação de um método format().

Quando as linhas f são declaradas, uma carta é escrita antes das aspas de abertura f.

name = 'Chris'
food = 'creme brulee'
f'Hello. My name is {name} and I like {food}.'
#=> 'Hello. My name is Chris and I like creme brulee'

9. Como encontrar uma substring em uma determinada parte de uma string?


O método index()pode ser chamado passando argumentos opcionais para ele, representando o índice do fragmento inicial e final da sequência, dentro do qual você precisa procurar uma substring.

'the happiest person in the whole wide world.'.index('the',10,44)
#=> 23

Preste atenção ao fato de que a construção acima retorna 23e 0, por assim dizer, não limitaria nossa pesquisa.

'the happiest person in the whole wide world.'.index('the')
#=> 0

10. Como inserir o conteúdo de uma variável em uma string usando o método format ()?


O método format()permite alcançar resultados semelhantes aos que podem ser obtidos usando as linhas f. É verdade que acredito que não é format()tão conveniente usar, pois todas as variáveis ​​precisam ser especificadas como argumentos format().

difficulty = 'easy'
thing = 'exam'
'That {} was {}!'.format(thing, difficulty)
#=> 'That exam was easy!'

11. Como sei se uma string contém apenas números?


Existe um método isnumeric()que retorna Truese todos os caracteres na sequência forem números.

'80000'.isnumeric() #=> True

Usando esse método, lembre-se de que ele não conta os sinais de pontuação como números.

'1.0'.isnumeric() #=> False

12. Como dividir uma string por um determinado caractere?


Aqui seremos ajudados por um método split()que quebra uma string por um determinado caractere ou por vários caracteres.

'This is great'.split(' ')
#=> ['This', 'is', 'great']
'not--so--great'.split('--')
#=> ['not', 'so', 'great']

13. Como verificar se uma string é composta apenas por letras minúsculas?


O método islower()retornará Trueapenas se a sequência for composta apenas por letras minúsculas.

'all lower case'.islower() #=> True
'not aLL lowercase'.islower() # False

14. Como verificar se uma string começa com uma letra minúscula?


Isso pode ser feito chamando o método acima islower()para o primeiro caractere da string.

'aPPLE'[0].islower() #=> True

15. É possível em Python adicionar um número inteiro a uma string?


Isso é possível em algumas linguagens, mas o Python gera um erro ao tentar executar uma operação semelhante TypeError.

'Ten' + 10 #=> TypeError

16. Como "inverter" uma linha?


Para "inverter" uma linha, ela pode ser dividida apresentando-a como uma lista de caracteres, "inverter" a lista e, combinando seus elementos, formar uma nova linha.

''.join(reversed("hello world"))
#=> 'dlrow olleh'

17. Como combinar a lista de linhas em uma linha, cujos elementos são separados por hífens?


O método join()pode combinar itens de lista em cadeias, separando cadeias individuais usando o caractere especificado.

'-'.join(['a','b','c'])
#=> 'a-b-c'

18. Como sei que todos os caracteres de uma string estão em ASCII?


O método isascii()retornará Truese todos os caracteres da sequência estiverem em ASCII.

print( 'Â'.isascii() ) #=> False
print( 'A'.isascii() ) #=> True

19. Como converter a corda inteira para maiúsculas ou minúsculas?


Para resolver esses problemas, você pode usar os métodos upper()e lower(), respectivamente, levar todos os caracteres das seqüências de caracteres para maiúsculas e minúsculas.

sentence = 'The Cat in the Hat'
sentence.upper() #=> 'THE CAT IN THE HAT'
sentence.lower() #=> 'the cat in the hat'

20. Como converter o primeiro e o último caracteres de uma string em maiúsculas?


Aqui, como em um dos exemplos anteriores, vamos nos referir aos caracteres da string pelo índice. As linhas em Python são imutáveis, portanto, criaremos novas linhas com base nas existentes.

animal = 'fish'
animal[0].upper() + animal[1:-1] + animal[-1].upper()
#=> 'FisH'

21. Como verificar se uma string é composta apenas por letras maiúsculas?


Existe um método isupper()semelhante ao já considerado islower(). Mas isupper()retorna Trueapenas se a cadeia inteira consistir em letras maiúsculas.

'Toronto'.isupper() #=> False
'TORONTO'.isupper() #= True

22. Em que situação você usaria o método splitlines ()?


O método splitlines()separa seqüências de caracteres por caracteres de quebra de linha.

sentence = "It was a stormy night\nThe house creeked\nThe wind blew."
sentence.splitlines()
#=> ['It was a stormy night', 'The house creeked', 'The wind blew.']

23. Como obter uma fatia de linha?


Para obter uma fatia de uma sequência, a seguinte sintaxe é usada:

string[start_index:end_index:step]

Aqui stepestá a etapa com a qual os caracteres de sequência de um intervalo serão retornados start_index:end_index. Um stepvalor 3 indica que cada terceiro caractere será retornado.

string = 'I like to eat apples'
string[:6] #=> 'I like'
string[7:13] #=> 'to eat'
string[0:-1:2] #=> 'Ilk oetape' ( 2- )

24. Como converter um número inteiro em uma string?


Você pode usar o construtor para converter um número em uma string str().

str(5) #=> '5'

25. Como sei que uma string contém apenas caracteres alfabéticos?


O método isalpha()retornará Truese todos os caracteres da string forem letras.

'One1'.isalpha() #=> False
'One'.isalpha() #=> True

26. Como substituir todas as ocorrências de uma certa substring em uma determinada linha?


Se você não exportar um módulo que permita trabalhar com expressões regulares, poderá usar o método para resolver esse problema replace().

sentence = 'Sally sells sea shells by the sea shore'
sentence.replace('sea', 'mountain')
#=> 'Sally sells mountain shells by the mountain shore'

27. Como retornar um caractere de uma linha com o código ASCII mínimo?


Se você olhar para os códigos ASCII dos elementos, verifica-se, por exemplo, que letras maiúsculas têm códigos mais baixos que minúsculas. A função min()retorna o caractere da sequência que possui o menor código.

min('strings') #=> 'g'

28. Como verificar se uma string contém apenas caracteres alfanuméricos?


Caracteres alfanuméricos incluem letras e números. Para responder a esta pergunta, você pode usar o método isalnum().

'Ten10'.isalnum() #=> True
'Ten10.'.isalnum() #=> False

29. Como remover espaços do início de uma linha (do lado esquerdo), do final (do lado direito) ou dos dois lados da linha?


Aqui, métodos lstrip(), rstrip()e , respectivamente, são úteis para nós strip().

string = '  string of whitespace    '
string.lstrip() #=> 'string of whitespace    '
string.rstrip() #=> '  string of whitespace'
string.strip() #=> 'string of whitespace'

30. Como verificar se uma string começa com uma determinada sequência de caracteres ou termina com uma determinada sequência de caracteres?


Para responder a essa pergunta, você pode recorrer, respectivamente, aos métodos startswith()e endswith().

city = 'New York'
city.startswith('New') #=> True
city.endswith('N') #=> False

31. Como codificar uma string em ASCII?


O método encode()permite codificar seqüências de caracteres usando a codificação especificada. A codificação padrão é usada utf-8. Se um determinado caractere não puder ser representado usando a codificação especificada, será gerado um erro UnicodeEncodeError.

'Fresh Tuna'.encode('ascii')
#=> b'Fresh Tuna'
'Fresh Tuna Â'.encode('ascii')
#=> UnicodeEncodeError: 'ascii' codec can't encode character '\xc2' in position 11: ordinal not in range(128)

32. Como sei que uma string inclui apenas espaços?


Existe um método isspace()que retorna Trueapenas se a sequência consistir apenas em espaços.

''.isspace() #=> False
' '.isspace() #=> True
'   '.isspace() #=> True
' the '.isspace() #=> False

33. O que acontece se você multiplicar uma linha por 3?


Uma nova linha será criada, representando a linha original repetida três vezes.

'dog' * 3
# 'dogdogdog'

34. Como tornar o primeiro caractere de cada palavra em uma string maiúscula?


Existe um método title()que maiúscula a primeira letra de cada palavra em uma seqüência de caracteres.

'once upon a time'.title() #=> 'Once Upon A Time'

35. Como combinar duas linhas?


Você pode usar o operador para concatenar seqüências de caracteres +.

'string one' + ' ' + 'string two' 
#=> 'string one string two'

36. Como usar o método partition ()?


O método partition()quebra a string pela substring fornecida. Depois disso, o resultado é retornado como uma tupla. Além disso, a substring ao longo da qual a quebra foi realizada também é incluída na tupla.

sentence = "If you want to be a ninja"
print(sentence.partition(' want '))
#=> ('If you', ' want ', 'to be a ninja')

37. Linhas em Python são imutáveis. O que isso significa?


O fato de as strings serem imutáveis ​​sugere que, após a criação de um objeto de string, ele não pode ser alterado. Ao "modificar" as strings, as strings originais não são alteradas. Em vez disso, objetos completamente novos são criados na memória. Você pode provar isso usando a função id().

proverb = 'Rise each day before the sun'
print( id(proverb) )
#=> 4441962336
proverb_two = 'Rise each day before the sun' + ' if its a weekday'
print( id(proverb_two) )
#=> 4442287440

Ao concatenar 'Rise each day before the sun'e ' if its a weekday'na memória, um novo objeto é criado com um novo identificador. Se o objeto original fosse alterado, os objetos teriam o mesmo identificador.

38. Se você declarar a mesma linha duas vezes (gravando-a em 2 variáveis ​​diferentes) - quantos objetos serão criados na memória? 1 ou 2?


Um exemplo desse trabalho com seqüências de caracteres é o seguinte fragmento de código:

animal = 'dog'
pet = 'dog'

Com essa abordagem, apenas um objeto é criado na memória. Quando me deparei com isso pela primeira vez, não me pareceu intuitivo. Mas esse mecanismo ajuda o Python a economizar memória ao trabalhar com seqüências longas.

Isso pode ser provado recorrendo a uma função id().

animal = 'dog'
print( id(animal) )
#=> 4441985688
pet = 'dog'
print( id(pet) )
#=> 4441985688

39. Como usar os métodos maketrans () e translate ()?


O método maketrans()permite descrever o mapeamento de um caractere para outro, retornando uma tabela de conversão.

O método translate()permite aplicar a tabela especificada para converter a sequência.

#  
mapping = str.maketrans("abcs", "123S")
#  
"abc are the first three letters".translate(mapping)
#=> '123 1re the firSt three letterS'

Por favor, note que o bar é feito de substituição símbolos a, b, ce s, respectivamente, os símbolos 1, 2, 3e S.

40. Como remover vogais de uma string?


Uma resposta para essa pergunta é que os caracteres em uma sequência são classificados usando o mecanismo de compreensão de lista. Os símbolos são verificados comparando-se com uma tupla contendo vogais. Se o caractere não estiver incluído na tupla, ele será anexado a uma nova linha.

string = 'Hello 1 World 2'
vowels = ('a','e','i','o','u')
''.join([c for c in string if c not in vowels])
#=> 'Hll 1 Wrld 2'

41. Em que situações você usa o método rfind ()?


O método rfind()é semelhante ao método find(), mas, ao contrário find(), verifica a sequência não da esquerda para a direita, mas da direita para a esquerda, retornando o índice da primeira ocorrência encontrada da substring desejada.

story = 'The price is right said Bob. The price is right.'
story.rfind('is')
#=> 39

Sumário


Costumo explicar a um gerente de produto, uma pessoa de idade, que os desenvolvedores não são dicionários que armazenam descrições de métodos de objetos. Porém, quanto mais métodos o desenvolvedor se lembrar, menos ele precisará pesquisar no Google e mais rápido e agradável ele trabalhará. Espero que agora você possa facilmente responder às perguntas discutidas aqui.

Queridos leitores! E o manuseio de strings no Python, você recomendaria àqueles que estão se preparando para uma entrevista?


All Articles