Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
ou ajuda????
_______________________________________
vetor=[]
tam=input('Digite quantos valores seram incluidos')
for i in range(tam):
from random import*
i=randint(1,tam)
vetor.append(i)
print vetor
[As partes desta mensagem que não continham texto foram removidas]
testei aqui até 1000000 e não deu nada.
mudar de range para xrange diminui o consumo de memória.
o import também não deveria estar no meio do for.
2010/3/8 kimeros <darkkrusk@gmail.com>:
> Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
> ou ajuda????
>
>
> _______________________________________
>
> vetor=[]
> tam=input('Digite quantos valores seram incluidos')
> for i in range(tam):
> from random import*
> i=randint(1,tam)
> vetor.append(i)
> print vetor
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ,----------------------------------------------------------.
> | Antes de enviar um e-mail para o grupo leia: |
> | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> | E se você é usuário do BOL lembre-se de cadastrar o |
> | e-mail do grupo na lista branca do seu sistema anti-spam. |
> `----------------------------------------------------------´Links do Yahoo! Grupos
>
>
>
--
diego
2010/3/8 kimeros <darkkrusk@gmail.com>:
> Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
> ou ajuda????
>
>
> _______________________________________
>
> vetor=[]
> tam=input('Digite quantos valores seram incluidos')
> for i in range(tam):
> from random import*
> i=randint(1,tam)
> vetor.append(i)
> print vetor
Dicas:
0) A endentação do código está errada. Não dá para confiar em e-mails
para enviar código. Use o pastebin [1] ou similar e mande apenas o
link para cá
http://pastebin.com/
1) Não faça o import no meio do loop. Faça no início do programa. Deve
estar aí o problema.
2) Ao fazer randint(1, tam) você está gerando valores de 1 a tam-1. É
isso mesmo o que você quer?
3) Se quiser gerar um vetor com todos os valores de 1 a tam, sem
repetição, pode fazer assim:
from random import shuffle
vetor = shuffle(range(1, tam+1))
[ ]s
Luciano
--
"""
Many were increasingly of the opinion that they'd all made a big
mistake in coming down from the trees in the first place. And some
said that even the trees had been a bad move, and that no one should
ever have left the oceans. (DA/HHGTTG)
"""
2010/3/8 kimeros <darkkrusk@gmail.com>
> Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
> ou ajuda????
em python anterior a 3.x range() mantem toda a lista criada por
range() na memoria enquanto xrange retorna um objeto iterável,
conservando memória. Provavelmente voce atingiu o limite de memoria.
Em geral nao é recomendado usar "from foo import *", veja a PEP8.
De qualquer forma, eu sugiro usar compreensào de listas nesse caso;
todo o seu código pode ser resumido a:
import random
tam = input('Digite quantos valores seram incluidos: ')
print [random.randint(1, tam) for i in xrange(tam)]
Abraços,
Pedro
Da documentação do Python (http://docs.python.org/library/random.html):
To choose a sample from a range of integers, use an
xrange()<http://docs.python.org/library/functions.html#xrange>object
as an argument. This is especially
*fast and space efficient* for sampling from a large population:
sample(xrange(10000000), 60).
Se você estiver fazendo algo sério, e quiser uma implementação decente pra
essa geração de um vetor aleatório, deveria usar o Numpy.
Postei um benchmark das soluções propostas e adicionei uma utilizando o
Numpy (http://paste.pocoo.org/show/187702/), seguem os tempos que deram para
mim:
Tempo total (teste #1): 10.1679s
Tempo total (teste #2): 3.1838s
Tempo total (teste #3): 9.7410s
Tempo total (teste #4): 3.5267s
Tempo total (teste #5): 0.1241s --> este é o tempo utilizando o Numpy
- Christian S. Perone
2010/3/9 Pedro Kroger <pedro.kroger@gmail.com>
> 2010/3/8 kimeros <darkkrusk@gmail.com>
>
> > Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> > estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma
> dica
> > ou ajuda????
>
> em python anterior a 3.x range() mantem toda a lista criada por
> range() na memoria enquanto xrange retorna um objeto iterável,
> conservando memória. Provavelmente voce atingiu o limite de memoria.
>
> Em geral nao é recomendado usar "from foo import *", veja a PEP8.
>
> De qualquer forma, eu sugiro usar compreensào de listas nesse caso;
> todo o seu código pode ser resumido a:
>
> import random
>
> tam = input('Digite quantos valores seram incluidos: ')
> print [random.randint(1, tam) for i in xrange(tam)]
>
> Abraços,
>
> Pedro
>
>
> ------------------------------------
>
> ,----------------------------------------------------------.
> | Antes de enviar um e-mail para o grupo leia: |
> | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> | E se você é usuário do BOL lembre-se de cadastrar o |
> | e-mail do grupo na lista branca do seu sistema anti-spam. |
> `----------------------------------------------------------´Links do
> Yahoo! Grupos
>
>
>
--
"Forgive, O Lord, my little jokes on Thee, and I'll forgive Thy great big
joke on me."
http://pyevolve.sourceforge.net/wordpress/
[As partes desta mensagem que não continham texto foram removidas]
Graças a vocês conheci um ambiente novo e uma forma bem eficiente de
implementar.
Obrigado a todos!!!
Em 9 de março de 2010 13:09, Pedro Kroger <pedro....@gmail.com> escreveu:
>
>
> 2010/3/8 kimeros <dark...@gmail.com <darkkrusk%40gmail.com>>
>
> > Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> > estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma
> dica
> > ou ajuda????
>
> em python anterior a 3.x range() mantem toda a lista criada por
> range() na memoria enquanto xrange retorna um objeto iterável,
> conservando memória. Provavelmente voce atingiu o limite de memoria.
>
> Em geral nao é recomendado usar "from foo import *", veja a PEP8.
>
> De qualquer forma, eu sugiro usar compreensào de listas nesse caso;
> todo o seu código pode ser resumido a:
>
> import random
>
> tam = input('Digite quantos valores seram incluidos: ')
> print [random.randint(1, tam) for i in xrange(tam)]
>
> Abraços,
>
> Pedro
>
>
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html