Alterando uma list Python dentro de um laço de iteração

Uma tarefa bastante comum para quem mexe com programação é alterar ou deletar dados de uma estrutura de dados dentro de um laço de iteração. Em linguagens que possuem ponteiros isso é mais simples pois podemos manipular precisamente os dados. Porém, em linguagens dinâmicas, como o Python, precisamos ter um pouco de cuidado para obter o que desejamos sem perder a referência dos dados.

Como exemplo vamos supor que temos uma list em Python, com inteiros que vão de 0 a 9 onde queremos deletar os números que forem menores que 5.

Para fazer isso poderíamos pensar no seguinte código:

numeros = range(0,10)

for i in numeros:
   if i < 5: # se o numero for menor que 5
   numeros.remove(i) # delete ele da lista

Contrariando o esperado, o resultado desse script será:

numeros = [1, 3, 5, 6, 7, 8, 9]

Isso acontece pois quando você deleta um elemento dentro do laço, o iterator “i”  perde o endereço daquele valor que saiu da list e acaba “pulando” posições no laço.

Para resolver essa questão podemos utilizar uma list comprehension, o que seria uma solução bastante elegante:

numeros = range(0,10)

numeros[:] = [x for x in numeros if not x < 5]

Você poderia utilizar numeros[] ao invés de numeros[:] porém na primeira opção você está criando uma list totalmente nova no lugar da antiga e não alterando-a e em alguns casos você pode obter alguns bugs.

Na opção numeros[:] você realmente está alterando a list antiga sem perigo de perder referências com o benefício adicional de ser mais rápido, o que pode ser crítico dependendo da quantidade de vezes que você executa esta instrução dentro do seu algoritmo.

O Apple Watch chega tarde e mesmo assim traz conceitos inovadores

O maior diferencial do Apple Watch em relação aos demais concorrentes com certeza é o Digital Crown, uma variação digital daquele knob de ajuste horário tão comum nos relógios analógicos. No Apple Watch ele serve como um botão de zoom ou de seleção quando girado ou então como um botão “home” quando pressionado.

apple-watch-digital-crown-580-90

Apple Watch com o Digital Crown sendo pressionado

O Digital Crown foi uma grande sacada e o mesmo não poderá ser copiado pelos concorrentes uma vez que a gigante de Cupertino tem a sua patente. Parece somente um pequeno detalhe, mas este elemento de usabilidade permite que o Apple Watch tenha, por exemplo, um aplicativo de mapas, onde e possível dar zoom sem ter que tocar na tela e, portanto, sem obstruir o mapa.

A solução para os concorrentes podem ser duas. A primeira opção seria aumentar o tamanho da tela para tornar possível a utilização de alguns aplicativos específicos e melhorar a experiência do usuário como um todo. Porém, este aumento de tela tem um limite e não é uma solução elegante. Alguns usuários simplesmente não gostam de relógios grandes.

Tizen-Samsung-Gear-S-Unpacked-2014-11

Samsumg Gear S

A outra seria colocar mais botões e controles no relógio. Os mesmos talvez não seriam tão intuitivos quanto o Digital Crown, o que deixa a Apple mais uma vez na frente e mais uma vez, o diferencial foi o quesito experiência do usuário e não especificações puramente técnicas.

A inflação do governo e sempre mais “verde”

Sempre que o governo divulga a inflação oficial se houve os mesmos comentários: “so x%? a inflação e maior que isso, outro dia eu fui comprar um saco de arroz e…

Para entender porque isso acontece primeiramente devemos entender como e feito o calculo deste importante indicador macroeconômico que e a inflação.

Devemos ter em mente que existem vários índices de inflação. Para citar alguns podemos falar sobre o IGP-M (Índice Geral de Preços do Mercado, calculado pela Fundação Getulio Vargas) e o IPCA (Índice de Preços ao Consumidor Amplo, calculado pelo IBGE).

Qual a diferença entre os vários índices de inflação? Para falar de maneira simplificada, a diferença fundamental e’ a cesta de produtos dos mesmos. Dito isto, o índice que retrata melhor a inflação para a maioria da população e’ o IPCA.

A cesta de produtos do IPCA consta produtos das seguintes categorias: alimentação e bebidas, transportes, habitação, saúde e cuidados pessoais, despesas pessoais, vestuário, comunicação, artigos de residência e educação.

Cada categoria de produtos tem um peso e a que representa o maior peso no IPCA e a categoria de alimentação e bebidas. Por isso, as matérias jornalísticas de economia dao mais ênfase na alta dos alimentos quando estão falando da alta da inflação.

Apesar do IPCA ser o indice mais adequado para calcular a inflação ao consumidor o mesmo não e perfeito pois ele também e composto de produtos que tem pesos maiores ou menores e a lista de supermercado das pessoas não são necessariamente iguais, dessa forma podemos dizer que cada um de nos experimentamos uma inflação diferente.

Vamos imaginar uma cesta de produtos especifica composta dos seguintes produtos: carne, arroz e feijão e os seguintes consumidores: Joao e Maria. Os produtos tem os seguintes pesos no nosso índice de inflação imaginário:

a) carne: 40%

b) arroz: 30%

c) feijao: 30%

Supondo que no periodo de apuração do nosso índice houve um aumento de 2% na carne, um aumento de 10% no arroz e uma queda de 5% no feijão, dessa forma o nosso índice de inflação no período de apuração sofreu uma variação media de 2,3%.

Ao ler isso nos Jornais, Maria que so come arroz ficou bastante contrariada pois para ela o índice de inflação foi de 10% uma vez que essa foi a alta de preço do arroz. Ja para Joao, que consome os produtos da cesta mais ou menos na proporção proposta neste índice, a inflação retrata de maneira razoável o aumento de preços que ele sentiu no bolso.

Neste pequeno exemplo podemos perceber que a inflação sentida pelos diversos segmentos da população vai ser diferente uma vez que a cesta de produtos que eles consomem não necessariamente vai ser igual a que o IBGE utiliza para calcular o índice IPCA.

Isso nao significa que o índice não pode ser manipulável, no ano de 2013 o governo segurou o preco da gasolina para que a alta índices de inflação fosse menor, uma vez que a gasolina e’ um produto que influencia no preco dos alimentos e alem disso esta diretamente relacionado a categoria de transportes que e a segunda categoria com maior peso no IPCA.

O capitalismo brasileiro que nos não conhecemos

Ha um tempo atras ouviu-se falar muito do Eike Batista, investidor brasileiro, que pretendia se tornar o homem mais rico do mundo. Enquanto o dono da EBX fazia muita propaganda, especulava muito e produzia pouco, o trio brasileiro da 3G, capitaneado pelos sócios fundadores Jorge Paulo Lemann, Beto Sicupira e Marcell Teles compravam grandes empresas.

A lista de compras do trio, que começou com a Brahma hoje tem a Budweiser, Burger King e Ambev no seu portfolio de marcas. A formula utilizada pelo grupo não e` secreta e basicamente consiste na compra de empresas grandes seguida de um choque de gestão onde os gastos são cortados, os salários e benefícios dos grandes executivos despencam, os fornecedores são exprimidos e quem não se alinha sai.

Apesar do trio não ser conhecido pelo grande publico, eles tem inclusive um livro, chamado Sonho Grande que conta a trajetória dos capitalistas. O nome do livro vem de uma frase bastante conhecida do JP Lemann que diz: “para sonhar grande voce gasta a mesma energia que sonhar pequeno” e neste livro e relatado o maior sonho deles: comprar a Coca-cola. O que antes era somente um sonho megalomaníaco começa a tomar forma

O bom desempenho da Bovespa

Nos últimos dias a Bovespa tem experienciado um ótimo desempenho, principalmente das estatais. Esta é a boa noticia.

O triste é saber que o motivo de tanto otimismo são as pesquisas de intenção de votos para a eleição presidencial desse ano.

O fato é que as pesquisas mostram poucas chances da nossa presidenta da república Dilma Rousseff se reeleger e isso está melhorando o humor do mercado e aumentando o valor de algumas estatais na bolsa.