[python-brasil] Combinação

1,131 views
Skip to first unread message

yeats1980

unread,
Sep 25, 2008, 10:19:59 AM9/25/08
to python...@yahoogrupos.com.br
Olá amigos,

Não sou programador, sei apenas o básico e busquei na net e quebrei a
cabeça por dias para resolver um problema, gostaria de fazer
combinações de elementos de uma list no python. Assim, tenho uma list
com 18 elementos e quero combinações de 9 elementos, sem repetição do
elementos (não quero fazer permutação), tentei o probstat mas o python
diz que o modulo nao está instalado. Se alguém puder me ajudar!


Obrigado


------------------------------------

,-----------------------------------------------------------.
| 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


Marcelo Andrade

unread,
Sep 25, 2008, 12:37:13 PM9/25/08
to python...@yahoogrupos.com.br
2008/9/25 yeats1980 <w.b....@uol.com.br>:

> Não sou programador, sei apenas o básico e busquei na net e quebrei a
> cabeça por dias para resolver um problema, gostaria de fazer
> combinações de elementos de uma list no python. Assim, tenho uma list
> com 18 elementos e quero combinações de 9 elementos, sem repetição do
> elementos (não quero fazer permutação), tentei o probstat mas o python
> diz que o modulo nao está instalado. Se alguém puder me ajudar!

Procure no histórico da lista (no site pythonbrasil.com.br tem os mecanismos
de busca). Se não me engano, há poucas semanas houve uma boa
discussão exatamente sobre isso.

Atenciosamente.

--
MARCELO DE F. ANDRADE
Belém, PA, Amazônia, Brasil
Linux User #221105

Conheça "A Turma do Açaí"(c) de Rosinaldo Pinheiro.
http://aturmadoacai.blogspot.com

yeats1980

unread,
Sep 25, 2008, 8:42:22 PM9/25/08
to python...@yahoogrupos.com.br
Olá pessoal, estou a dias quebrando a cabeça para fazer algo trivial.
Combinar um vetor de x elementos em grupos de n em n, fiz uma
bagunçada e cheguei perto, mas não consigo achar o numero de
combinações corretamente. Basicamente faço a combinação e depois vou
invertendo os vetores e depois excluo as combinações iguais. O que me
irrita mais é que sei que são meia dúzia de linhas, olhem a palhaçada
que fiz abaixo:

Ajuda por favor

cont = 0
M = [1,2,3,4,5,6,7,8,9,10]

def comb(M):
comb = 5
jogo = 0
i = 0
f = 0
MM = []

while i != len(M) - (comb-2):
k = i - 1
f = i + (comb-2)
while k <= f :
d = f + 1
c = d + 1
tam = 0
P = []
#while c < len(M):
for j in range(i,f+1):
if j != k:
P.append(M[j])
tam = tam + 1
if tam == comb - 1:
c = c - 1
while c < len(M):
P.append(M[c])
tam = tam + 1
c = c + 1
cont = cont + 1
temp = []
for tp in range(0,len(P)):
temp.append(P[tp])
MM.append(temp)
print P
del P[comb-1]

if tam == (comb-2):
while d < len(M):
P.append(M[d])
#print M[d],
while c < len(M):
P.append(M[c])
tam = tam + 1
c = c + 1
cont = cont + 1
temp = []
for tp in range(0,len(P)):
temp.append(P[tp])
MM.append(temp)
print P
del P[comb-1]
#print P,
del P[comb-2]
d = d + 1
#print P

k = k + 1
i = i + 1

print cont
print len(MM)

return MM

K = []

K.append(comb(M))

M.reverse()
K.append(comb(M))

combi = 5
for i in range(combi,len(M)):
j = len(M)-1
troca = M.pop(j)
M.insert(i,troca)
K.append(comb(M))


M.reverse()
K.append(comb(M))


F=[]

for f in range(0,len(K)):
for ff in range(0,len(K[f])):
F.append(K[f][ff])
G = []
for i in range(0,len(F)):
inserir = 0
for j in range(0,len(G)):
if F[i] == G[j]:
inserir = 1
if inserir == 0:
G.append(F[i])

for i in range(0,len(G)):
G[i].sort()
G.sort()
print F,len(F)

print '\n\n\n',G,len(G)

Yguaratã C. Cavalcanti

unread,
Sep 26, 2008, 8:24:34 AM9/26/08
to python...@yahoogrupos.com.br
dá uma olhada no probstat (http://probstat.sourceforge.net/). lá tem uns
exemplos que deve servir a seu propósito. ;)

[]s

2008/9/25 yeats1980 <w.b....@uol.com.br>

--
Yguaratã C. Cavalcanti

Msc Candidate in Computer Science - http://www.cin.ufpe.br
RiSE Researcher - http://www.rise.com.br/research
------------------------------------------
Home page: http://www.yguarata.com


[As partes desta mensagem que não continham texto foram removidas]

Junior Polegato - Linux

unread,
Sep 26, 2008, 10:38:18 AM9/26/08
to python...@yahoogrupos.com.br
yeats1980 escreveu:

> Olá pessoal, estou a dias quebrando a cabeça para fazer algo trivial.
> Combinar um vetor de x elementos em grupos de n em n, fiz uma
> bagunçada e cheguei perto, mas não consigo achar o numero de
> combinações corretamente. Basicamente faço a combinação e depois vou
> invertendo os vetores e depois excluo as combinações iguais. O que me
> irrita mais é que sei que são meia dúzia de linhas, olhem a palhaçada
> que fiz abaixo:
> Ajuda por favor
> [...]

Olá,

Combinação sem repetição dos elementos distintos é um método
recursivo sem segredo, meia dúzia de linhas:

def comb(v, n, v0 = []):
if n == 1:
for i in range(len(v)):
print v0 + [v[i]]
else:
for i in range(len(v)-n+1):
comb(v[i+1:], n-1, v0+[v[i]])

comb([1,2,3,4,5], 3)


É isso?

[]'s
Junior Polegato

Henrique Mayer

unread,
Sep 26, 2008, 11:12:19 AM9/26/08
to python...@yahoogrupos.com.br
E além de procurar no histórico, vale a pena instalar o módulo probstat,
faça o download[1]

com o probstat vc faz algo como:

from probstat import Combination
combs = Combination([1,2,3,4,5,6,7,8], 6) #vai gerar 28 combinações, como o
esperado

tenho usado bastante ele aqui, as minhas limitações tem sido memória da
máquina e o limite de elementos nos dicionários :(

Abraços

[1] http://probstat.sf.net/

2008/9/25 Marcelo Andrade <mfan...@gmail.com>

> 2008/9/25 yeats1980 <w.b....@uol.com.br <w.b.yeats%40uol.com.br>>:


>
> > Não sou programador, sei apenas o básico e busquei na net e quebrei a
> > cabeça por dias para resolver um problema, gostaria de fazer
> > combinações de elementos de uma list no python. Assim, tenho uma list
> > com 18 elementos e quero combinações de 9 elementos, sem repetição do
> > elementos (não quero fazer permutação), tentei o probstat mas o python
> > diz que o modulo nao está instalado. Se alguém puder me ajudar!
>
> Procure no histórico da lista (no site pythonbrasil.com.br tem os
> mecanismos
> de busca). Se não me engano, há poucas semanas houve uma boa
> discussão exatamente sobre isso.
>
> Atenciosamente.
>
> --
> MARCELO DE F. ANDRADE
> Belém, PA, Amazônia, Brasil
> Linux User #221105
>
> Conheça "A Turma do Açaí"(c) de Rosinaldo Pinheiro.
> http://aturmadoacai.blogspot.com
>
>

--
$> cd /pub
$> more beer


[As partes desta mensagem que não continham texto foram removidas]

yeats1980

unread,
Sep 26, 2008, 11:21:30 AM9/26/08
to python...@yahoogrupos.com.br
Olá amigos,

consegui achar

Muito Muito Obrigado

Em python...@yahoogrupos.com.br, "Yguaratã C. Cavalcanti"
<yguarata@...> escreveu


>
> dá uma olhada no probstat (http://probstat.sourceforge.net/). lá tem uns
> exemplos que deve servir a seu propósito. ;)
>
> []s
>

> 2008/9/25 yeats1980 <w.b.yeats@...>

Thiago Coutinho

unread,
Sep 26, 2008, 8:10:17 AM9/26/08
to python...@yahoogrupos.com.br
2008/9/25 yeats1980 <w.b....@uol.com.br>:

> Olá pessoal, estou a dias quebrando a cabeça para fazer algo trivial.
> Combinar um vetor de x elementos em grupos de n em n, fiz uma
> bagunçada e cheguei perto, mas não consigo achar o numero de
> combinações corretamente. Basicamente faço a combinação e depois vou
> invertendo os vetores e depois excluo as combinações iguais. O que me
> irrita mais é que sei que são meia dúzia de linhas, olhem a palhaçada
> que fiz abaixo:

Cara, por favor, cole o seu código em algum pastebin.

http://python.pastebin.com/


--
Thiago Coutinho - http://thiago.bunghole.com.br/

A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

Junior Polegato - Linux

unread,
Sep 26, 2008, 1:18:53 PM9/26/08
to python...@yahoogrupos.com.br
Thiago Coutinho escreveu:
> 2008/9/25 yeats1980 <w.b....@uol.com.br>:

>
> Cara, por favor, cole o seu código em algum pastebin.
> http://python.pastebin.com/
>

Olá,

Qual o real motivo em se usar um "pastebin"? Ao que me consta,
aqui no meu gerenciador de e-mail Mozilla Thunderbird o código fica
normal, a não ser quando se tem símbolo de "maior que" na frente, mas
sem problemas, e quanto a ver na página do grupo, tem a opção na direita
"Exibir opções da mensagem" e logo abaixo abre "Usar fonte de tamanho
fixo", mostrando o código normalmente. Quem tem problemas com isso? Acho
melhor assim do que colocar o código em um local que futuramente pode
"sumir", melhor deixar tudo numa mesma mensagem, pelo menos penso assim.
<http://br.groups.yahoo.com/group/python-brasil/message/35492?var=0&l=1#>

[]'s
Junior Polegato

Adam Victor Nazareth Brandizzi

unread,
Sep 26, 2008, 1:23:20 PM9/26/08
to python...@yahoogrupos.com.br
2008/9/26 Junior Polegato - Linux <li...@juniorpolegato.com.br>:
> Olá,

Olá!

> Qual o real motivo em se usar um "pastebin"? Ao que me consta,
> aqui no meu gerenciador de e-mail Mozilla Thunderbird o código fica
> normal, a não ser quando se tem símbolo de "maior que" na frente, mas
> sem problemas, e quanto a ver na página do grupo, tem a opção na direita
> "Exibir opções da mensagem" e logo abaixo abre "Usar fonte de tamanho
> fixo", mostrando o código normalmente. Quem tem problemas com isso? Acho
> melhor assim do que colocar o código em um local que futuramente pode
> "sumir", melhor deixar tudo numa mesma mensagem, pelo menos penso assim.
> <http://br.groups.yahoo.com/group/python-brasil/message/35492?var=0&l=1#>

Bem, no GMail ao menos o código aparece todo horrível, e dificilmente
compilável. No GMANE (que é uma interface melhor para a lista) também
sai bem ruim: http://blog.gmane.org/gmane.comp.python.brasil,
http://news.gmane.org/gmane.comp.python.brasil

Além disso, o pastebin tem realce de sintaxe.

Enfim, tirando códigos pequeninos, acho o pastebin muito bom, mesmo
com o risco de "sumir" :)

> []'s
> Junior Polegato

Até!

--
Adam Victor Nazareth Brandizzi
http://brandizzi.googlepages.com/

Pedro Werneck

unread,
Sep 26, 2008, 1:30:04 PM9/26/08
to python...@yahoogrupos.com.br
On Friday 26 September 2008 14:18:53 Junior Polegato - Linux wrote:
> Thiago Coutinho escreveu:
> > 2008/9/25 yeats1980 <w.b....@uol.com.br>:
> >
> > Cara, por favor, cole o seu código em algum pastebin.
> > http://python.pastebin.com/
>
> Olá,
>
> Qual o real motivo em se usar um "pastebin"? Ao que me consta,
> aqui no meu gerenciador de e-mail Mozilla Thunderbird o código fica
> normal, a não ser quando se tem símbolo de "maior que" na frente, mas
> sem problemas, e quanto a ver na página do grupo, tem a opção na direita
> "Exibir opções da mensagem" e logo abaixo abre "Usar fonte de tamanho
> fixo", mostrando o código normalmente. Quem tem problemas com isso? Acho
> melhor assim do que colocar o código em um local que futuramente pode
> "sumir", melhor deixar tudo numa mesma mensagem, pelo menos penso assim.

Várias razões. Nem todo mundo usa Thunderbird ou algum leitor de email
semelhante.

Lembre também que o pastebin é para ser usado apenas em código grande, e isso
já funciona muito bem para estimular o indíviduo com dúvida a justamente
tentar resumir o código ao mínimo possível que cause o mesmo problema, porque
sabe que mantendo-o pequeno o bastante para poder enviá-lo no corpo mensagem,
a chance de receber resposta é bem maior do que se for preciso seguir um
link.

Outra coisa é o tráfego desnecessário gerado. Considere que recentemente
enviaram uma mensagem com 160kb de código aqui na lista, e isso é enviado
para os 2600 membros, você tem mais de 400mb de transferência praticamente
inútil, porque uma parcela mínima desses irá de fato interessar-se em ler o
código, e dentre aqueles que leram a maior parte vai é responder repreendendo
o autor original e pedindo para enviar o mínimo de código possível que
replique o problema.

--
Pedro Werneck

Junior Polegato - Linux

unread,
Sep 26, 2008, 1:33:36 PM9/26/08
to python...@yahoogrupos.com.br
Pedro Werneck escreveu:

> On Friday 26 September 2008 14:18:53 Junior Polegato - Linux wrote:
>
>> Thiago Coutinho escreveu:
>>
>>> 2008/9/25 yeats1980 <w.b....@uol.com.br>:
>>>
>>> Cara, por favor, cole o seu código em algum pastebin.
>>> http://python.pastebin.com/
>>>
>> Qual o real motivo em se usar um "pastebin"? Ao que me consta,
>> aqui no meu gerenciador de e-mail Mozilla Thunderbird o código fica
>> normal, a não ser quando se tem símbolo de "maior que" na frente, mas
>> sem problemas, e quanto a ver na página do grupo, tem a opção na direita
>> "Exibir opções da mensagem" e logo abaixo abre "Usar fonte de tamanho
>> fixo", mostrando o código normalmente. Quem tem problemas com isso? Acho
>> melhor assim do que colocar o código em um local que futuramente pode
>> "sumir", melhor deixar tudo numa mesma mensagem, pelo menos penso assim.
>>
> Várias razões. Nem todo mundo usa Thunderbird ou algum leitor de email
> semelhante.
> Lembre também que o pastebin é para ser usado apenas em código grande, e isso
> já funciona muito bem para estimular o indíviduo com dúvida a justamente
> tentar resumir o código ao mínimo possível que cause o mesmo problema, porque
> sabe que mantendo-o pequeno o bastante para poder enviá-lo no corpo mensagem,
> a chance de receber resposta é bem maior do que se for preciso seguir um
> link.
> Outra coisa é o tráfego desnecessário gerado. Considere que recentemente
> enviaram uma mensagem com 160kb de código aqui na lista, e isso é enviado
> para os 2600 membros, você tem mais de 400mb de transferência praticamente
> inútil, porque uma parcela mínima desses irá de fato interessar-se em ler o
> código, e dentre aqueles que leram a maior parte vai é responder repreendendo
> o autor original e pedindo para enviar o mínimo de código possível que
> replique o problema.
>

Entendido! ;-)

[]'s
Junior Polegato

Marco André Lopes Mendes

unread,
Sep 26, 2008, 1:45:27 PM9/26/08
to python...@yahoogrupos.com.br
O wiki do pythonbrasil também poderia ser usado pra esse fim. Não pe
tão prático quanto o pastebin, pois exige que se crie uma página nova
e a pessoa precisa de uma conta. Mas o código aparece colorido, pode
ser copiado e colado e fica registrado no site. Se a intenção for
criar um código que possa ser no futuro referenciado e estudado por
outras pessoas, o wiki do python brasil é uma boa opção.

[]s

--
Marco André
marco...@gmail.com
http://marrcandre.blogspot.com

Thiago Coutinho

unread,
Sep 26, 2008, 1:55:40 PM9/26/08
to python...@yahoogrupos.com.br
2008/9/26 Junior Polegato - Linux <li...@juniorpolegato.com.br>:
> Thiago Coutinho escreveu:
>> 2008/9/25 yeats1980 <w.b....@uol.com.br>:
>>
>> Cara, por favor, cole o seu código em algum pastebin.
>> http://python.pastebin.com/
>>
>
> Olá,
>
> Qual o real motivo em se usar um "pastebin"? Ao que me consta,
[...]

Leia o e-mail original no Gmail e você entenderá :^)


--
Thiago Coutinho - http://thiago.bunghole.com.br/

A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

------------------------------------

alvaronetto

unread,
Sep 28, 2008, 1:52:22 AM9/28/08
to python...@yahoogrupos.com.br
Caro Yguaratã.

Você encontra isso e muito mais no site
http://code.activestate.com/recipes/190465/

Abraços.
Álvaro Netto.


--- Em python...@yahoogrupos.com.br, "Yguaratã C. Cavalcanti"
<yguarata@...> escreveu
>


> dá uma olhada no probstat (http://probstat.sourceforge.net/). lá tem uns
> exemplos que deve servir a seu propósito. ;)
>
> []s
>

> 2008/9/25 yeats1980 <w.b.yeats@...>

Reply all
Reply to author
Forward
0 new messages