<jupyter_start><jupyter_text>Listas Vamos começar definindo uma string.<jupyter_code>palavra = "meunome"
letras = list("meunome")<jupyter_output><empty_output><jupyter_text>Observe que `palavra` é uma string, e por isso os métodos que podem ser aplicados a esta variável são os métodos associados a um objeto do tipo string, enquanto que `letras` é uma **lista**, com métodos associados a um objeto do tipo lista:<jupyter_code>letras
type(letras)
dir(letras)<jupyter_output><empty_output><jupyter_text>Também podemos saber quantos itens tem uma lista:<jupyter_code>len(letras)<jupyter_output><empty_output><jupyter_text>O acesso a cada elemento de uma lista é feito da mesma maneira como acessamos os caracteres de uma string (lembrando que o índice do primeiro elemento de uma lista, no Python, é 0)<jupyter_code>letras[0]<jupyter_output><empty_output><jupyter_text>Também podemos acessar o último elemento de uma lista usando um índice especial:<jupyter_code>letras[-1]<jupyter_output><empty_output><jupyter_text>Na verdade, índices negativos funcionam exatamente como esperaríamos:<jupyter_code>letras[-3]<jupyter_output><empty_output><jupyter_text>---Alguns métodos especiais que são bastante interessantes: O método `append` acrescenta ao final da lista algum item:<jupyter_code>frase = "O dia está lindo"
pedacos = frase.split()
pedacos
pedacos.append("!")
pedacos<jupyter_output><empty_output><jupyter_text>O método `insert` acrescenta um item à lista, na posição indicada:<jupyter_code>pedacos.insert(3,"mais")
pedacos<jupyter_output><empty_output><jupyter_text>Em Python, o **operador** `del` pode ser usado para excluir um item de uma lista, dado seu índice:<jupyter_code>del pedacos[3]
pedacos<jupyter_output><empty_output><jupyter_text>No entanto, é mais usual excluirmos um item da lista usando o método `pop` (que exclui um item selecionado pelo seu índice, assim como o operador `del`) ou o método `remove` (que remove um item da lista selecionado pelo seu *valor*):<jupyter_code>pedacos.remove("está")
pedacos<jupyter_output><empty_output><jupyter_text>O método `pop` é interessante pois retorna, ao final de sua execução, o valor do item que foi removido:<jupyter_code>pedacos.pop(3)<jupyter_output><empty_output><jupyter_text>(o valor retornado aparece como saída da célula anterior.) Podemos também descobrir o índice de um item da lista, dado seu valor:<jupyter_code>pedacos.index("dia")<jupyter_output><empty_output><jupyter_text>Para descobrirmos se determinado valor está em uma lista, usamos a seguinte sintaxe:<jupyter_code>"!" in pedacos<jupyter_output><empty_output><jupyter_text>Veja que o método `pop` modificou a variável pedaços! Observe que na lista `pedacos`, cada entrada também pode ser vista como uma lista!<jupyter_code>pedacos[1]<jupyter_output><empty_output><jupyter_text>Nesse caso, temos uma lista de listas, e assim podemos acessar cada um dos itens dessas sublistas:<jupyter_code>pedacos[1][0]<jupyter_output><empty_output><jupyter_text>Tome um tempo para entender a sintaxe acima...  SlicingWe can select pieces of a list (or string) easily using the concept of *slicing*. Observe que, com um parâmetro a mais, podemos selecionar os elementos da lista de 2 em 2:<jupyter_code>numeros = [1,3,6,9,12,15,18,21]
numeros[0]
numeros[-1]<jupyter_output><empty_output><jupyter_text>Para selecionarmos itens com índices 3 até 5, usamos<jupyter_code>numeros[3:6]<jupyter_output><empty_output><jupyter_text>Eu sei! Mas existe uma razão para que a saída desse comando não inclua o item com índice 6: quanto dizemos `lista[início:fim]`, o resultado é uma lista com `fim-início` elementos. Observe que, com um parâmetro a mais, podemos selecionar os elementos da lista de 2 em 2:<jupyter_code>numeros[0:11:2]<jupyter_output><empty_output><jupyter_text>Podemos gerar uma nova lista contendo pedaços da lista original:<jupyter_code>numeros = [numeros[4:6],numeros[3:8]]
print(numeros)<jupyter_output>[[12, 15], [9, 12, 15, 18, 21]]<jupyter_text>Infelizmente, o resultado acima é uma lista de listas: cada elemento da lista é, por sua vez, uma outra lista:<jupyter_code>numeros[0]<jupyter_output><empty_output><jupyter_text>Assim, para acessarmos um elemento individual da lista numeros, precisamos utilizar um índice para a lista externa, e outro índice para a lista interna:<jupyter_code>numeros[0][1]<jupyter_output><empty_output><jupyter_text>Para transformarmos aquela lista de listas em uma lista simples, podemos usar o comando abaixo (admito que é um pouco mágico, mas funciona! ;))<jupyter_code>lista = [item for sublist in numeros for item in sublist]
lista<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09039792387543252, 'fraction_numerical': 0.012326989619377162, 'mean_word_length': 7.980582524271845, 'pattern_counts': {'":': 0, '<': 88, '<?xml version=': 0, '>': 88, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '22', 'dir': 'jupyter-structured-clean-dedup', 'id': '340196', 'license': 'MIT', 'n_tokens_mistral': 1749, 'n_tokens_neox': 1737, 'n_words': 487, 'path': 'content/pt_br/Notebook 03 - Listas.ipynb', 'repo_name': 'mauriciolanda4/callicore', 'size': '4624'}