A lista e uma sequencia: um conjunto linear (como um vetor em outras linguagens) de valores indexados por um numero inteiro. Os indices sao iniciados em zero e atribuidos sequencialmente a partir deste. A lista pode conter quaisquer valores, incluindo valores de tipos mistos, e ate outras listas. Para criar uma lista, usamos colchetes e virgulas para enumerar os valores:>>> numeros = [1, 2, 3]>>> opcoes = ["nao", "sim", "talvez"]>>> modelos = [3.1, 3.11, 95, 98, 2000, "Millenium", "XP"]>>> listas = [numeros, opcoes] Neste exemplo criamos quatro listas diferentes, com elementos de tipos diversos. A quarta lista tem como elementos outras listas: em outras palavras, e uma lista de listas:>>> print listas[[1, 2, 3], ['nao', 'sim', 'talvez']] Para acessar um elemento especifico de uma lista, usamos o nome da lista seguido do indice entre colchetes: >>> print numeros[0]1>>> print opcoes[2]talvez>>> print modelos[4]2000 Usando indices negativos, as posicoes sao acessadas a partir do final da lista, -1 indicando o ultimo elemento: >>> print numeros[-1]3>>> print modelos[-2]Millenium Python oferece um mecanismo para criar `fatias' de uma lista, ou slices. Um slice e uma lista gerada a partir de um fragmento de outra lista. O fragmento e especificado com dois indices, separados por dois pontos; o slice resultante contem os elementos cujas posicoes vao do primeiro indice ao segundo, nao incluindo o ultimo elemento. Se omitirmos um dos indices no slice, assume-se inicio ou fim da lista.>>> print numeros[:2][1, 2]>>> print opcoes[1:]['sim', 'talvez']>>> print modelos[1:5] [3.1000000000000001, 95, 98, 2000] Note que o terceiro exemplo demonstra a mesma particularidade referente a representacao de numeros de ponto flutuante. Python exibe a representacao interna dos seus elementos, e portanto, floats sao impressos com precisao completa. RECURSIVIDADE Dizemos um objeto ser recursivo, quando ele e definido em termos de si proprio. Quando um metodo recursivo e chamado para resolver algum problema, na verdade, o metodo e capaz de resolver apenas o(s) caso(s) mais simples(s) ou o(s) caso(s) basico(s). Se a chamado do metodo for de um metodo basico, o metodo retorna o caso base. Se o metodo for chamado com um problema mais complexo, em geral o metodo divide o programa em duas partes conceituais - uma parte que o metodo sabe como fazer e a outra que o metodo nao sabe. Para tornar a recurssao realizavel, a ultima parte deve assemelhar-se ao problema original, mas ser uma versao ligeiramente mais simples ou menor dele. Como esse novo problema e parecido com o problema original, o metodo chama uma nova copia dele proprio para trabalhar no problema menor - isto e referido como chamada recursiva. O passo de recursao normalmente inclui a instrucao return. A chaamda recursiva executa enquanto a chamada original para o metodo esta ainda ativa. O passo de recursao (chamada recursiva) pode resultar em muitas outras chamadas recursivas e medida que o metodo divide cada novo subproblema em duas partes conceituais. Para que a recursao por fim termine, toda vez que o metodo chamar a si proprio com uma versao mais simples do problema original, a sequencia de problemas cada vez menores deve convergir em um