<jupyter_start><jupyter_text>List Comprehensions<jupyter_code>minhalista = "Como fazer uma list comprehension".split()<jupyter_output><empty_output><jupyter_text>Observe que na linha acima aplicamos o método `split` diretamente a uma string, sem precisarmos nomear uma variável com o conteúdo da string!<jupyter_code>minhalista<jupyter_output><empty_output><jupyter_text>Como transformar todas as primeiras letras de cada item da lista em maiúsculas?<jupyter_code>minhalista = [x.capitalize() for x in minhalista]
minhalista<jupyter_output><empty_output><jupyter_text>De fato, uma lista comprehension inclui um comando de repetição: executamos alguma ação com cada item de uma lista; se lermos a expressão da lista comprehension, poderíamos dizer: "retorne a palavra x com a primeira letra maiúscula para cada palavra na minhalista" Observe que `x` é uma variável local à *list comprehension*; ela serve apenas para que possamos fazer referência a cada item da lista sendo percorrida na nova expressão que queremos gerar. Fora da *list comprehension*, o Python não sabe quem é esse `x`:<jupyter_code>x<jupyter_output><empty_output><jupyter_text>Exemplo: língua do P<jupyter_code>linguadope = ["Pe"+palavra for palavra in minhalista]
linguadope<jupyter_output><empty_output><jupyter_text>Para transformarmos essa lista em uma string, podemos usar o método `join`:<jupyter_code>" ".join(linguadope)<jupyter_output><empty_output><jupyter_text>Uma explicação para a sintaxe do `join`: http://www.faqs.org/docs/diveintopython/odbchelper_join.html (basicamente, o método `join` precisa de duas strings: um resultado e uma "cola". Mas o argumento a ser unido pode ser outra coisa além de uma string (notadamente, *iterables*)  Exemplo: lista de números É comum querermos gerar uma lista de números delimitada por dois valores. A função `range(a,b)` gera uma lista que vai do número `a` até `b-1`; porém, o resultado da função `range` não é a lista diretamente, mas uma estrutura de dados que precisamos transformar em uma lista.<jupyter_code>numeros = [n for n in range(0,10)]
print(numeros)<jupyter_output>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<jupyter_text>Podemos, usando *list comprehensions*, gerar outras listas. Por exemplo, gerar uma lista de números ímpares:<jupyter_code>numeros = [2*n+1 for n in range(0,11)]
numeros<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08240819812126388, 'fraction_numerical': 0.008112724167378309, 'mean_word_length': 6.888888888888889, 'pattern_counts': {'":': 0, '<': 32, '<?xml version=': 0, '>': 32, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '39820', 'license': 'MIT', 'n_tokens_mistral': 851, 'n_tokens_neox': 824, 'n_words': 274, 'path': 'content/pt_br/Notebook Extra - List Comprehensions.ipynb', 'repo_name': 'mauriciolanda4/callicore', 'size': '2342'}