Você recebe uma string que possui vários valores separados por vírgula (ou qualquer outro caractere), divide ela e fica com um vetor cheio de valores que podem ou não possuir um espaço antes ou depois da string. Nestes casos, você faz um segundo passo, que é remover os espaços de cada um dos valores do seu vetor. No exemplo deste post, vou mostrar como fazer estes dois passos de uma vez.
Se você está pensando que o segundo passo pode ser evitado apenas solicitando que o usuário não utilize espaços entre os valores, então você está delirando. Não confie na boa vontade ou memória do usuário. É sua responsabilidade garantir que os dados lidos estarão no formato que você precisa. (OK, pode não ser sua obrigação, mas é uma boa prática…)
Deixando a filosofia de lado, vamos ao exemplo prático…
Vamos demonstrar o problema:
1 2 3 4 5 6 |
#Variables... foods = "bacon, meat, pork chop, landjaeger, hamburger" food_arr = [] #Step00: Just to show the problem... print(foods.split(",")) |
No código acima, quebramos a string e a transformamos em um vetor e jogamos este resultado na função print. Isso vai gerar o seguinte output:
1 |
['bacon', ' meat', ' pork chop', ' landjaeger', ' hamburger'] |
Salvo pelo primeiro item, os outros possuem espaços extras e precisamos remove-los.
O modo ‘demorado’ de fazer estas operações seria assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#Variables... foods = "bacon, meat, pork chop, landjaeger, hamburger" food_arr = [] #Step00: Just to show the problem... print("old:\t{0}".format(foods.split(","))) #Step 01: Split the string. for food in foods.split(","): #Step 02: Removing extra spaces. food_arr.append(food.strip()) #Final Step: Printing result... print("new:\t{0}".format(food_arr)) |
No fonte acima, repetimos a demonstração do problema para conseguir compara-la com a resolução. O passo 01 é bem simples: quebrar a string (.split(“,”) e jogar o resultado em um for. O segundo passo é remover os espaços extras (.strip() e incluir o resultado desta remoção no vetor).
(Este exemplo está no meu GitHub)
Simples, certo? OK, são só 2 linhas de código, mas podemos reduzir isso para apenas 01 linha de código.
Agora vamos para o exemplo mais otimizado:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Variables... foods = "bacon, meat, pork chop, landjaeger, hamburger" #Step00: Just to show the problem... print("old:\t{0}".format(foods.split(","))) #Step 01: Split the string and removes the spaces. food_arr = [food.strip() for food in foods.split(',')] #Final Step: Printing result... print("new:\t{0}".format(food_arr)) |
Neste script, repetimos a demonstração do problema, mas resolvemos ele utilizado a list comprehension do Python. O que está sendo feito no passo 01 deste exemplo é o mesmo que foi feito nos passos 01 e 02 do exemplo anterior: A string está sendo transformada em um vetor e cada elemento deste vetor está sendo tratado (removendo os espaços extras). O retorno destas operações é um vetor (list), como é indicado pelos [] que estão em volta dos comandos.
(Este exemplo está no meu GitHub)
Espero ter ajudado.
Referência:


Latest posts by Breno RdV (see all)
- Tabela de cores ANSI (Python) - Abril 24, 2018
- Utilizando cores para escrever no terminal (Python) - Abril 20, 2018
- Inicializando dicionário com valores padrões (Python) - Abril 17, 2018