Moving average function python no Brasil
Este é um wrapper Python para TA-LIB baseado em Cython em vez de SWIG. A partir da homepage: TA-Lib é amplamente utilizado pelos desenvolvedores de software de negociação que exigem a realização de análise técnica de dados do mercado financeiro. Inclui 150 indicadores como ADX, MACD, RSI, estocástico, Bollinger Bands, etc. Reconhecimento de padrão de candlestick API de código aberto para CC, Java, Perl, Python e 100 gerenciados As ligações Python originais usam SWIG que infelizmente são difíceis de instalar e não Tão eficientes quanto poderiam ser. Portanto, este projeto usa Cython e Numpy para se ligar de forma eficiente e limpa a TA-Lib - produzindo resultados 2-4 vezes mais rápido do que a interface SWIG. Instalar o TA-Lib ou Ler os Docs Similar à TA-Lib, a interface de função fornece um invólucro leve dos indicadores TA-Lib expostos. Cada função retorna uma matriz de saída e tem valores padrão para seus parâmetros, a menos que especificado como argumentos de palavra-chave. Normalmente, essas funções terão um período inicial de retorno (um número necessário de observações antes que uma saída seja gerada) definida para NaN. Todos os exemplos a seguir usam a função API: Calcula uma média móvel simples dos preços de fechamento: Cálculo de bandas de bollinger, com média móvel exponencial tripla: Momento de cálculo dos preços de fechamento, com um período de tempo de 5: Já familiarizado com o uso da função API, você deve se sentir em casa usando a API abstrata. Cada função tem a mesma entrada, passada como um dicionário de arrays Numpy: As funções podem ser importadas diretamente ou instanciadas por nome: A partir daí, chamar funções é basicamente o mesmo que a função API: Saiba mais sobre o uso mais avançado de TA-Lib aqui . Indicadores Suportados Podemos mostrar todas as funções TA suportadas pelo TA-Lib, como uma lista ou como um dict classificado por grupo (por exemplo, Estudos de Sobreposição, Indicadores de Momentum, etc.): Grupos de FunçõesSpyder - o Python IDE Seg 16 September 2017 Hans Fangohr. University of Southampton, Reino Unido, 2017 Spyder desenvolveu-se em uma ferramenta bastante madura e muito produtiva aqui eu tento fornecer um tutorial. Esta documentação é motivada por cursos de treinamento em Python e modelagem computacional para estudantes da Universidade de Southampton (ver nota histórica para mais detalhes). Esta entrada de blog foi integrada no Spyder como o Tutorial. Uma vez que o Spyder tenha iniciado, a versão mais atualizada deste tutorial pode ser encontrada no tutorial do Help - gt Spyder. Obtenha o arquivo hello world na janela do editor do Spyder, baixando hello. py e salve como hello. py. (Faça o download do arquivo clicando com o botão direito do mouse no link no seu navegador e selecione Salvar destino como ou Salvar download como) e abra o arquivo hello. py no menu Arquivo e selecione Abrir. Expressamos isso como Arquivo - gt Open em suma. Clique em hello. py para ver o código fonte no webbrowser, em seguida, copie o código inteiro navegar para a janela do editor no spyder e cole o código. Em seguida, salve o arquivo como hello. py. Para executar o programa, selecione Run - gt Run (ou pressione F5) e confirme as configurações de Run, se necessário. Você deve ver a saída como: ou (o caminho específico dependerá de onde você salvou o arquivo, mas isso é inserido pelo Spyder automaticamente): Se assim for, então você acabou de executar o seu primeiro programa Python - bem feito. Antes de prosseguir, por favor O console IPython pode fazer um pouco mais do que o console padrão do Python, e sugerimos usá-lo como o console padrão aqui. Na sessão do interpretador IPython que acabamos de iniciar, você pode usar Run-gtRun (como antes) para executar hello. py e você deve ver: Python lê o arquivo linha por linha, ignorando comentários quando ele vem através da palavra-chave def, ele Sabe que uma função é DEFINIDA nesta e na próxima (uma ou mais) linhas. No arquivo hello. py, o Python cria um objeto de função com o nome hello. Todas as linhas recuadas após def hello (): pertencem ao corpo da função. Observe que o objeto de função é criado apenas neste ponto no arquivo, mas a função ainda não é chamada (ou seja, não executada). Quando Python se deparar com comandos (que não def. E algumas outras palavras-chave) que são escritos na coluna mais à esquerda, ele irá executá-los imediatamente. No arquivo hello. py esta é apenas a linha de leitura hello () que realmente chamará (ou seja, executar) a função com o nome hello. Se você remover a linha hello () do programa e executar o arquivo inteiro novamente (pressionando F5, ou selecionando executar - gt executar), nada será impresso (porque a função hello é definida, mas não chamado, ou seja, não executado) . Agora você deve saber como executar um programa Python que você tem na janela do editor no Spyder usando o Python Console eo Console IPython mais sofisticado. Se você está apenas começando a aprender Python, este é provavelmente um bom ponto para retornar ao seu curso livro de texto e olhar para mais exemplos básicos. A próxima seção fornece informações mais detalhadas sobre como executar partes do código no editor no console do Python e, assim, atualizar partes de suas definições no editor. Esta é uma técnica mais avançada, mas pode ser muito útil. (Você também pode estar interessado na opção de executar pedaços (chamados quotcellsquot) de código que são separados por delimitadores - veja atalhos para funções úteis.) Depois de ter executado o hello. py programa, o objeto função hello é definido E conhecido no prompt do Python. Podemos chamar a função a partir do prompt Python: Chame a função hello () do prompt Python, ie digite hello () na janela Python Shell (o prompt do Python mostra como gtgtgt. Ou como In se usarmos a sessão IPython onde O ponto de interrogação pode ser qualquer número inteiro positivo.), E pressione a tecla de retorno. Você deve achar que a função hello () é executada novamente, ou seja, Hello World é impresso novamente. Sua chamada de função no prompt do Python juntamente com a saída deve ser assim: Você pode ver como isso difere de executar todo o programa novamente Quando executamos todo o programa (pressionando F5), Python passa pelo arquivo, cria a função hello Objeto (substituindo o objeto anterior), atinge o programa principal e chama a função. Quando chamamos hello () do prompt Python, chamamos somente os objetos de função hello que foram definidos no console (I) Python quando executamos o arquivo hello. py inteiro mais cedo (pressionando F5). Isso se tornará mais claro ao longo do tempo e também quando trabalharmos com exemplos um pouco maiores. Você pode querer retornar a este tutorial em um estágio um pouco mais tarde. O Python fornece uma função que exibe todos os objetos conhecidos (no espaço de nome atual). É chamado dir (). Quando você digita dir () no prompt, você obtém uma lista de objetos conhecidos. Ignore tudo começando com um sublinhado por enquanto. Você pode ver Olá na lista (Se você receber uma longa lista de objetos definidos, então o Spyder pode ter feito algumas conveniências de importação para você já. Para resolver isso, você pode querer: Em seguida, execute dir () como sugerido acima. Objeto é visível no espaço de nome atual (como é hello neste exemplo), podemos usar a função de ajuda da seguinte forma para aprender sobre ele: Digite help (hello) no prompt de Python, você deve ver a saída como este: Onde Python Tomar as informações de alguns deles (como o número de argumentos de entrada e nomes dessas variáveis aqui não temos argumentos de entrada) Python pode encontrar através de inspecionar seus objetos, informações adicionais vem da seqüência de documentação fornecida para o objeto função hello. A string de documentação é a primeira string imediatamente abaixo da linha def hello ():. O ambiente do Spyder também fornece um painel no canto superior direito (por padrão), que é o Inspetor de objetos. Se você digitar hello na linha vazia na janela Inspetor de objetos, também fornecerá a seqüência de ajuda. Na janela Editor, altere a função hello para que imprima Good Bye World em vez de Hello World. Pressione F5 (para executar todo o programa) e verifique se a saída do programa está agora: O que aconteceu quando você pressionou F5 é isto: Python passou pelo arquivo hello. py e criou um novo objeto de função hello (substituindo a função Objeto hello que tínhamos definido antes) e, em seguida, executou a função. Precisamos começar com um estado claramente definido. Para fazer isso, altere a função hello () de volta para que ela imprima Hello World (ou seja, use o arquivo hello. py original), então pressione F5 para executar todo o programa e verifique se ele imprime Hello World. Chame a função hello () a partir do prompt de comando (conforme descrito em Chamar objetos de função existentes a partir da linha de comando). Você deve ver o Hello World impresso. Agora altere a definição da função para que ela imprima Laters World. E salve o arquivo (mas NÃO execute o programa, ou seja, não pressione F5 ainda). Chamar a função hello () a partir da linha de comandos novamente. Você deve achar que o texto impresso lê Hello World. Como aqui Por que isso é assim Porque o objeto de função hello no interpretador Python é o antigo que imprime Hello World. Até agora, alteramos o arquivo hello. py (e substituímos Hello World por Laters World) no editor, mas isso não afetou os objetos que foram criados anteriormente no interpretador Python. Aqui estão duas possibilidades para usar a nossa versão modificada da função hello: Opção 1: executar o arquivo inteiro hello. py novamente pressionando F5: isso cria um novo objeto função hello (e substitui o antigo). Você deve descobrir que se você pressionar F5 e, em seguida, chamar hello () no prompt, o novo texto Laters World é impresso. Opção 2: selecione a região que você alterou (neste caso, a função inteira hello. a partir da linha def hello (): para baixo para retornar None e selecione Run - gt Run seleção. Isto atualizará o objeto hello no interpretador Sem ter que executar todo o arquivo hello. py: Se nós agora digitar hello (). Vemos a resposta de atualização: A capacidade de executar partes do código para atualizar alguns objetos no interpretador (no exemplo acima, nós atualizamos a função Objeto hello), é de grande utilidade ao desenvolver e depurar códigos mais complexos, e ao criar objectsdata na sessão de intérprete levar tempo. Por exemplo, ao modificar apenas as funções (ou objetos de classes, etc) que estamos realmente desenvolvendo ou depuração, nós Podemos continuar a reutilizar as estruturas de dados, etc, que são definidas na sessão de interpretação. Para ensinar programação Python e modelagem computacional, recomendamos (i) usar IPython em vez do intérprete Python normal e (ii) não usar qualquer conveniência importações. Seu IPython aceita como o padrão de facto e ajuda a compreender melhor namespaces. O Spyder tenta ajudar usuários mais avançados ao importar um número de módulos para o espaço de nome principal. Digite scientific no prompt de comando para ver os detalhes. Esse comportamento pode mudar nas versões futuras do Spyder. Embora essas importações de conveniência sejam muito úteis para programadores mais experientes, elas podem ser confusas (se não enganosas) para iniciantes. Recomendamos, portanto, desfazer essas importações para que atendam aos nossos requisitos acima e (i) mudar para um console IPython. E (ii) emitir o comando reset para redefinir o espaço de nomes. Ambas as etapas são explicadas com mais detalhes na próxima seção. Na janela de console (canto inferior direito por padrão), você verá por padrão um prompt com três sinais maiores do que, ou seja, gtgtgt. Isso mostra que estamos usando o console - basicamente uma sessão de interpretador Python normal (com algumas funcionalidades adicionais do Spyder). Em vez disso, gostaríamos de usar um shell Interactive Python, um IPython curto do projeto ipython. Para fazer isso, selecione Interpreters - gt Abra um console IPython. Você deve ver na janela consolse um novo shell aparecendo, eo prompt IPython In 1: deve ser exibido. O espaço de nomes pode ser limpo no IPython usando o comando reset. Digite reset e pressione return e confirme com y: Discutimos isto um pouco mais, mas você pode ignorar o seguinte se você não estiver interessado: Depois de emitir o comando reset, devemos ter apenas alguns objetos definidos no namespace daquela sessão . Podemos listar todos eles usando o comando dir (): Finalmente, se você quiser ignorar a etapa de confirmação do comando reset, use pode usar reset - f em vez de reset. Além da Sintaxe que é aplicada pelo Python, existem convenções adicionais sobre o layout do código fonte, em particular o Guia de Estilo para o código fonte Python sabe como quotPEP8quot. Um monte de comportamento Spyders pode ser configurado através de suas preferências. Onde está localizado no menu depende do seu sistema operacional: No Windows e Linux, vá para Ferramentas - gt Preferências No Mac OS, vá para Python - gt Preferências Ir para Preferências - gt IPython console - gt Inicialização e selecione a caixa de seleção ao lado de Abra um console IPython na inicialização. Em seguida, clique no botão OK. A próxima vez que o Spyder for iniciado, ele mostrará o console IPython automaticamente. Vá para Preferences - gt Editor - gt Code IntrospectionAnalysis e selecione a caixa de seleção ao lado de Style analysis (PEP8) Para evitar qualquer magia quando o console é iniciado, vá para Preferências - gt Console - gt Configurações Avançadas - gt PYTHONSTARTUP substituição e selecione Default PYTHONSTARTUP script (E reinicie o Spyder). (Essa mágica, entre outras coisas, executa o comando de divisão de importação do futuro.) As configurações padrão podem mudar para isso na próxima versão principal. Para evitar a importação de todos os objetos de pylab e numpy para o espaço de nome atual no Console IPython, vá para Preferências - gt Console IPython - gt Graphics e desmarque a caixa de seleção ao lado de Carregar automaticamente módulos Pylab e NumPy e também desmarque Ativar suporte. As configurações padrão podem mudar para isso na próxima versão principal. Através de Preferências - gt IPython console - gt Configurações Avançadas - gt Use matemática simbólica podemos ativar o modo python simbólico de IPythons. Isso permitirá que a saída do sympy seja bem renderizada (estilo látex) e também importe alguns objetos sympy automaticamente quando o console IPython for iniciado e relata o que ele fez. Podemos então usar as variáveis x. Y. Por exemplo: F5 executa o buffer atual F9 executa o bloco de código atualmente destacado: isso é muito útil para atualizar definições de funções (digamos) na sessão do interpretador sem precisar executar o arquivo inteiro novamente CTRL ltRETURNgt executa a célula atual No menu Executar - gt Executar célula). Uma célula é definida como o código entre duas linhas que começam com a tag acordada. SHIFT ltRETURNgt executa a célula atual e avança o cursor para a próxima célula (entrada de menu Executar - gt Executar célula e avançar). As células são úteis para executar um grande segmento de filecode em unidades menores. (É um pouco como uma célula em um notebook IPython, em que pedaços de código pode ser executado independentemente.) ALT ltCURSOR UPgt move a linha atual para cima. Se várias linhas forem destacadas, elas serão movidas para cima. ALTltCURSOR DOWNgt trabalha correspondentemente com a (s) linha (s) em movimento para baixo. Clicando com o botão direito em um método de função na fonte, abre-se um novo editor de janelas mostrando a definição dessa função. SHIFTCTRLALTM maximiza a janela atual (ou muda o tamanho de volta ao normal se pressionado em uma janela maximizada) SHIFTCTRLF ativa a pesquisa em todos os arquivos. No Mac OS X: CMD irá aumentar o tamanho da fonte no editor, CMD - diminuir. Também funciona no Console IPython. O tamanho da fonte para o explorador de objetos, o console Python etc pode ser definido individualmente através de Preferências - gt Object explorer etc Eu não poderia encontrar uma maneira de mudar o tamanho da fonte no explorador de variáveis. CTRLSPACE autocompletes comandos, nomes de função, nomes de variáveis, métodos muito úteis. CMDs (no Mac OS X) e CTRLs (caso contrário) na janela do editor salva o arquivo atualmente sendo editado. Isso também força vários triângulos de aviso na coluna esquerda do editor a serem atualizados (caso contrário, eles são atualizados a cada 2 a 3 segundos por padrão). CMDs (no Mac OS X) e CTRLs (caso contrário) na janela do console IPython salva a sessão IPython atual como um arquivo HTML, incluindo quaisquer figuras que podem ser exibidas inline. Isso é útil como uma forma rápida de gravar o que foi feito em uma sessão. CMDi (no Mac OS X) e CTRLi (caso contrário) quando pressionado enquanto o cursor está em um objeto (não é possível carregar este registro salvo na sessão - se você precisar de uma funcionalidade como esta, procure o IPython Notebook. , Abre a documentação para esse objeto no inspector de objetos. Estas são as configurações que definem como o código no editor é executado se selecionarmos Executar - gt Run ou pressione F5. Por padrão, a caixa de configurações será exibida na primeira vez que tentar executar um arquivo. Se quisermos alterar as configurações em qualquer outro momento, elas podem ser encontradas em Run - gt Configure ou pressionando F6. Há três escolhas para o intérprete usar, de que eu discuto os dois primeiros. Vamos supor que temos um programa hello. py no editor que lê Esta é a sugestão padrão, e também geralmente uma boa escolha. Escolhendo Executar na configuração atual do interpretador Python ou IPython em Executar - gt Configure significa que Quando a execução de hello. py é concluída, podemos interagir com o interpretador no qual o programa foi executado e podemos usar o conveniente intérprete IPython para isso Que o interpretador Python padrão). Podemos inspecionar e interagir com objetos que a execução de nosso programa criou, como i e hello (). Isso geralmente é muito útil para a codificação incremental, testes e depuração: podemos chamar hello () diretamente do prompt do interpretador, e não precisa executar todo o hello. py para isso (embora se mudar a função hello (). Para executar o buffer, ou pelo menos a definição da função, para tornar a nova versão do hello () visível no interpretador executando o buffer inteiro ou via Run - gt Run Selection.) No entanto, executando o código no editor no Interpretador atual também significa que o código que executa pode ver outros objetos (globais) que foram definidos na sessão de interpretador. Esta persistência de objetos é facilmente esquecida e geralmente não é necessária quando se trabalha em pequenos programas (embora possa ser de grande valor ocasionalmente). Esses objetos podem vir de execução anterior do código, do trabalho interativo no interpretador ou de importações de conveniência, como da importação do pylab (o Spyder pode fazer algumas dessas importações de conveniência automaticamente). Essa visibilidade de objetos no espaço de nome global do interpretador para o código que executamos também pode resultar em erros de codificação se o código invoca inadvertidamente esses objetos. Aqui está um exemplo: imagine que executamos o código hello. py. Posteriormente, a variável i é conhecida no interpretador como uma variável global. Editamos a fonte hello. py e apagamos acidentalmente a linha i 42 executamos o buffer contendo hello. py novamente. Neste ponto, a chamada de hello (i) não falhará porque o interpretador tem um objeto de nome i definido, embora isso não esteja definido na fonte de hello. py. Neste ponto, poderíamos salvar o hello. py e (falsamente) pensar que ele seria executado corretamente. No entanto, executá-lo em uma nova sessão de interpretador python (ou via python hello. py. Say) resultaria em um erro, porque i não está definido. O problema surge porque o código faz uso de um objeto (aqui i) sem criá-lo. Isso também afeta a importação de módulos: se tivéssemos importado o pylab no prompt do IPython, então o nosso programa verá isso quando executado nesta sessão do interpretador IPython. Para saber como podemos verificar se o nosso código não depende desses objetos existentes, consulte Como verificar se o seu código é executado corretamente no quoton. Escolhendo Executar no novo intérprete Python dedicado em Executar - gt Configure iniciará um novo interpretador Python toda vez que o programa hello. py for executado. A principal vantagem deste modo sobre Executar no atual interpretador Python ou IPython é que podemos ter certeza de que não há objetos globais definidos neste intérprete que se originam de depuração e execução repetida do nosso código: cada vez que executamos o código no editor , O interpretador python no qual o código é executado é reiniciado. Esta é uma opção segura, mas fornece menos flexibilidade e não pode usar o interpretador IPyton. Supondo que você escolheu para o seu código para executar no atual interpretador Python ou IPython. Então você duas opções para verificar se o nosso código funciona por conta própria (isto é, não depende de variáveis indefinidas, módulos não-importados e comandos etc) Alternativamente, se você quiser ficar com o interpretador IPython atual, você pode usar IPythons magic reset Comando que removerá todos os objetos (como i no exemplo acima) do espaço de nome atual e, em seguida, executar o código no editor. Depois de ter concluído um pedaço de código, verifique novamente que ele executa de forma independente usando uma das opções explicadas em Como verificar o seu código duplo executa corretamente quoton seu próprio. Quando vários arquivos são abertos no editor, as guias correspondentes na parte superior da área da janela são organizadas em ordem alfabética do nome do arquivo da esquerda para a direita. À esquerda das guias, há como ícone que mostra as guias Procurar se o mouse paira sobre ele. É útil para saltar para um determinado arquivo diretamente, se muitos arquivos estão abertos. As variáveis de ambiente podem ser exibidas a partir da janela do Console (janela inferior direita no layout padrão). Clique no ícone Opções (a dica de ferramenta é Opções) e, em seguida, selecione Variáveis de ambiente. Toda a personalização salva em disco pode ser redefinida chamando spyder da linha de comando com o switch --reset. Isto é, um comando como spyder --reset. Clicar com o botão direito do mouse em arrays no explorador de variáveis oferece opções para plotar e analisar essas outras. Clicar duas vezes em um objeto de dicionário abre uma nova janela que exibe o dicionário corretamente. Presumivelmente há outra capacidade oculta para alguns outros tipos de dados. Existem algumas convenções assumidas sobre cadeias de documentação escritas em texto reestruturado. Se seguimos essas diretrizes, podemos obter seqüências de documentação formadas em Spyder. Por exemplo, para obter a nossa função average () semelhante a esta no Spyder Object explorer: Precisamos formatar a seqüência de documentação como segue O que importa aqui, é que a palavra Parâmetros é usado, e sublinhado. A linha a. Número mostra-nos que o tipo do parâmetro a é número. Na próxima linha, que está recuado, podemos escrever uma explicação mais extensa o que esta variável representa, quais condições os tipos permitidos têm de cumprir, etc. O mesmo para todos os Parâmetros e também para o valor retornado. Muitas vezes é uma boa idéia incluir um exemplo como mostrado. A ativação do modo de depuração (Debug - gt Debug) inicia o depurador IPython (ipdb) no console IPython. Isso é operado normalmente, mas a janela de exibição do editor destaca a linha que está prestes a ser executada eo explorador de variáveis exibe variáveis no contexto atual do ponto de execução do programa. (Exibe apenas variáveis numéricas, ou seja, não objetos de função, etc.) Os comandos de chave dentro do depurador IPython são teclas individuais: s para Passo para a instrução atual. Se esta for uma chamada de função, entre nessa função. N mover para a instrução Next. Se a instrução atual for uma função, não entre nessa função, mas execute-a completamente antes de retornar o controle para o prompt do depurador interativo. R completar todas as instruções na função atual e retornar a partir dessa função antes de retornar o controle. P Print permite exibir valores de variáveis, por exemplo, p x imprimirá o valor da variável x. Observe que no ipdb, você também pode alterar os valores da variável. Por exemplo, para modificar um x válido. Você pode dizer ipdb gt x 42 e o depurador continuará com x sendo vinculado a 42. Você também pode chamar funções, e fazer muitas outras coisas. Para sair do modo de depuração, você pode digitar exit ou selecionar no menu Debug - gt Debugging Control - gt Exit No console IPython, podemos chamar debug logo após uma exceção ter sido levantada: isso vai iniciar o modo de depuração do IPython e permite Inspeção das variáveis locais no ponto em que ocorreu a exceção conforme descrito acima. Isso é muito mais eficiente do que adicionar instruções de impressão ao código e executá-lo novamente. Se você usar isso, você também pode querer usar os comandos para cima e para baixo que navegam o ponto de inspeção para cima e para baixo da pilha. Assumindo que usamos um console IPython com a versão gt 1.0.0, podemos decidir se as figuras criadas com o matplotlibpylab serão mostradas inline. (Acima da pilha significa para as funções que chamaram a função atual para baixo é a direção oposta. Dentro do console IPython, ou se devem aparecer dentro de uma nova janela. A opção 1 é conveniente para salvar um registro da sessão interativa (seção Atalhos para funções úteis lista um atalho para salvar o console IPython em um arquivo html). Opção 2 permite zoom interativo na figura, manipulá-lo um pouco, e salvar a figura para diferentes formatos de arquivo através do menu. O comando para obter as figuras para aparecer inline no console IPython é matplotlib inline. O comando para obter figuras aparecem em sua própria janela (que tecnicamente é um QT windown) é matplotlib qt. As preferências do Spyder podem ser usadas para personalizar o comportamento padrão (em particular Preferências - gt IPython Console - gt Graphics - gt Ativar Suporte para alternar para plotagem em linha). O tipo de lista é um contêiner que contém vários outros objetos, em uma determinada ordem. O tipo de lista implementa o protocolo de seqüência e também permite que você adicione e remova objetos da seqüência. Criando Listas160 Para criar uma lista, coloque um número de expressões entre colchetes: Esta construção é conhecida como 8220list display8221. O Python também suporta listas computadas, chamadas 8220list comprehensions8221. Em sua forma mais simples, uma lista compreensão tem a seguinte sintaxe: onde a expressão é avaliada uma vez, para cada item na seqüência. As expressões podem ser qualquer coisa que você pode colocar todos os tipos de objetos em listas, incluindo outras listas e múltiplas referências a um único objeto. Você também pode usar o objeto de tipo lista interna para criar listas: A seqüência pode ser qualquer tipo de objeto de seqüência ou iterável, incluindo tuplas e geradores. Se você passar em outra lista, a função de lista faz uma cópia. Observe que o Python cria uma única nova lista toda vez que você executa a expressão. Nem mais nem menos. E o Python nunca cria uma nova lista se você atribuir uma lista a uma variável. Para obter informações sobre como adicionar itens a uma lista uma vez que a criou, consulte Modificando Listas abaixo. Li retorna o item no índice i (o primeiro item tem o índice 0), e Li: j retorna uma nova lista, contendo os objetos entre I e j. Se você passar em um índice negativo, Python adiciona o comprimento da lista ao índice. L-1 pode ser usado para acessar o último item de uma lista. Para a indexação normal, se o índice resultante estiver fora da lista, o Python gera uma exceção IndexError. As fatias são tratadas como limites e o resultado simplesmente conterá todos os itens entre os limites. As listas também suportam etapas de fatia: Looping Over Lists160 A instrução for-in facilita o loop sobre os itens em uma lista: Se você precisar tanto do índice quanto do item, use a função enumerate: Se você precisar apenas do índice, use range E len. O objeto lista suporta o protocolo iterador. Para criar explicitamente um iterador, use a função iter interna: Python fornece vários atalhos para operações de lista comuns. Por exemplo, se uma lista contiver números, a função de soma interna lhe dará a soma: Se uma lista contém seqüências de caracteres, você pode combinar a seqüência de caracteres em uma única seqüência longa usando o método de string de junção: Python também fornece operações internas para Procurar itens e ordenar a lista. Estas operações são descritas abaixo. Modificando Listas160 O tipo de lista também permite atribuir itens individuais ou fatias e excluí-los. Observe que as operações que modificam a lista o modificarão no local. Isso significa que se você tiver várias variáveis que apontam para a mesma lista, todas as variáveis serão atualizadas ao mesmo tempo. Para criar uma lista separada, você pode usar o corte ou a função lista para criar rapidamente uma cópia: Você também pode adicionar itens a uma seqüência existente. O método append adiciona um único item ao final da lista, o método extend adiciona itens de outra lista (ou qualquer seqüência) até o final e insere um item em um determinado índice e move os itens restantes para a direita. Para inserir itens de outra lista ou seqüência em algum outro local, use a sintaxe de corte: Você também pode remover itens. A instrução del pode ser usada para remover um item individual, ou para remover todos os itens identificados por uma fatia. O método pop remove um item individual e o retorna, enquanto remove as buscas de um item e remove o primeiro item correspondente da lista. A instrução del eo método pop faz praticamente a mesma coisa, exceto que o pop retorna o item removido. Finalmente, o tipo de lista permite reverter rapidamente a ordem da lista. A inversão é rápida, portanto, inverter temporariamente a lista geralmente pode acelerar as coisas se você precisar remover e inserir um monte de itens no início da lista: Note que a instrução for-in mantém um índice interno, que é incrementado para cada loop iteração. Isso significa que, se você modificar a lista que está fazendo loop, os índices ficarão fora de sincronia e você pode acabar saltando itens ou processar o mesmo item várias vezes. Para contornar isso, você pode fazer um loop sobre uma cópia da lista: Alternativamente, você pode usar criar uma nova lista e anexá-la: Um padrão comum é aplicar uma função a cada item em uma lista e substituir o item por O valor de retorno da função: O acima pode ser melhor escrito usando a função de mapa embutido, ou como uma compreensão de lista: Para chamadas de função simples, a solução de mapa é mais eficiente, uma vez que o objeto de função só precisa ser buscado uma vez . Para outras construções (por exemplo, expressões ou chamadas a métodos de objeto), você tem que usar um callback ou um lambda para envolver a operação em tais casos, a compreensão da lista é mais eficiente e geralmente também mais fácil de ler. Novamente, se você precisar tanto do item quanto do índice, use enumerate. Você pode usar o tipo de lista para implementar estruturas de dados simples, como pilhas e filas. O tipo de lista isn8217t otimizado para isso, portanto, isso funciona melhor quando as estruturas são pequenas (geralmente algumas centenas de itens ou menores). Para estruturas maiores, você pode precisar de uma estrutura de dados especializada, como collections. deque. Outra estrutura de dados para a qual uma lista funciona bem na prática, desde que a estrutura seja razoavelmente pequena, é um recipiente LRU (menos usado recentemente). As instruções a seguir movem um objeto para o final da lista: Se você fizer o acima de cada vez que você acessa um item na lista LRU, os itens usados menos recentemente mover-se-ão para o início da lista. (Para uma implementação de cache simples usando essa abordagem, consulte Cache.) Pesquisando Listas160 O operador in pode ser usado para verificar se um item está presente na lista: Para obter o índice do primeiro item correspondente, use o índice. O método de índice faz uma pesquisa linear e pára no primeiro item correspondente. Se nenhum item correspondente for encontrado, ele gera uma exceção ValueError. Para obter o índice de todos os itens correspondentes, você pode usar um loop e passar em um índice de início: Movendo o loop para uma função auxiliar torna mais fácil de usar: Para contar itens correspondentes, use o método count: A lista inteira, por isso, se você quiser apenas verificar se um valor está presente na lista, você deve usar em ou, quando aplicável, índice. Para obter o item mais pequeno ou maior de uma lista, use as funções min e max integradas: Como acontece com o sort (veja abaixo), você pode passar uma função chave que é usada para mapear os itens da lista antes de serem comparados: Sorting Listas160 O método sort classifica uma lista no lugar. Para obter uma cópia classificada, use a função classificada embutida: Uma classificação no local é um pouco mais eficiente, já que o Python não precisa alocar uma nova lista para armazenar o resultado. Por padrão, o algoritmo de classificação Python8217s determina a ordem comparando os objetos na lista uns contra os outros. Você pode substituir isso passando em um objeto chamado que leva dois itens e retorna -1 para 8220less than8221, 0 para 8220equal8221 e 1 para 8220greater than8221. A função cmp interna é muitas vezes útil para isso: Como alternativa, você pode especificar um mapeamento entre itens de lista e teclas de pesquisa. Se você fizer isso, o algoritmo de classificação fará uma passagem sobre os dados para criar uma matriz de chaves e, em seguida, classificar a matriz de chaves ea lista com base nas chaves. If the transform is complex, or the list is large, this can be a lot faster than using a compare function, since the items only have to be transformed once. Python8217s sort is stable the order of items that compare equal will be preserved. Printing Lists160 By default, the list type does a repr on all items, and adds brackets and commas as necessary. In other words, for built-in types, the printed list looks like the corresponding list display: To control formatting, use the string join method, combined with either map or a list comprehension or generator expression. To print a list of string fragments to a file, you can use writelines instead of write . Performance Notes160 The list object consists of two internal parts one object header, and one separately allocated array of object references. The latter is reallocated as necessary. The list has the following performance characteristics: The list object stores pointers to objects, not the actual objects themselves. The size of a list in memory depends on the number of objects in the list, not the size of the objects. The time needed to get or set an individual item is constant, no matter what the size of the list is (also known as 8220O(1)8221 behaviour). The time needed to append an item to the list is 8220amortized constant8221 whenever the list needs to allocate more memory, it allocates room for a few items more than it actually needs, to avoid having to reallocate on each call (this assumes that the memory allocator is fast for huge lists, the allocation overhead may push the behaviour towards O(nn)). The time needed to insert an item depends on the size of the list, or more exactly, how many items that are to the right of the inserted item (O(n)). In other words, inserting items at the end is fast, but inserting items at the beginning can be relatively slow, if the list is large. The time needed to remove an item is about the same as the time needed to insert an item at the same location removing items at the end is fast, removing items at the beginning is slow. The time needed to reverse a list is proportional to the list size (O(n)). The time needed to sort a list varies the worst case is O(n log n), but typical cases are often a lot better than that. Last Updated: November 2006
Comments
Post a Comment