Jump to content
kodiak

Ciclo for em Python para inserir items numa lista

Recommended Posts

kodiak

Viva.

Ando aqui às voltas com um ciclo e não me consigo safar.

O exemplo serve apenas para exemplo e não quero usar métodos avançados, ou seja, quanto mais simples for melhor.

Tenho o seguinte código:

lista_1 = [1] * 100
lista_2 = [2]
n2 = 4
n1 = 8

e pretendo criar a seguinte lista:

lista_1 = [1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,............]

Ou seja, após o número de 1's dado por n1 vêm os números de 2's dados por n2 e assim sucessivamente.

Fazer a primeira parte, ou seja, [1,1,1,1,1,1,1,1,2,2,2,2, eu consigo fazer. O problema é conseguir repetir para que fique como a solução que dei acima.

a lista_1 está * 100 por dois motivos. Primeiro para não estar aqui a colocar 100 caracteres 1 e segundo porque o tamanho das listas pode variar.

Alguém tem alguma ideia de como resolver isto?

Obrigado,

Kodiak

Share this post


Link to post
Share on other sites
FenrisDK

uma bem ridicula ..

for k in range( 100/n1 ):

pos = n1*(k+1) + n2*k
for i in range( n2 ):
	lista_1.insert( pos+i , lista_2[0] )

Share this post


Link to post
Share on other sites
hmiguel

for k in range(n1,len(lista_1),n1+n2):
for u in range(n2):
	lista_1[k+u] = lista_2[0]

:smoke:


"Homem que é Homem não usa Java!"

Share this post


Link to post
Share on other sites
kodiak

for k in range(n1,len(lista_1),n1+n2):
for u in range(n2):
	lista_1[k+u] = lista_2[0]

:smoke:

Viva. Este deu para dar um grande adiantamento no que queria fazer. Contudo tem um pequeno problema. o len(lista_1) não é estático visto aumentar à medida que se faz o ciclo.

Para resolver este inconveniente, fiz o seguinte:

for k in range(n1,len(lista_1) + ((n1 -1) * n2),n1+n2):

Obrigado,

Kodiak

Share this post


Link to post
Share on other sites
hmiguel

Viva. Este deu para dar um grande adiantamento no que queria fazer. Contudo tem um pequeno problema. o len(lista_1) não é estático visto aumentar à medida que se faz o ciclo.

Para resolver este inconveniente, fiz o seguinte:

for k in range(n1,len(lista_1) + ((n1 -1) * n2),n1+n2):

Obrigado,

Kodiak

No caso que eu fiz(baseado nos dados que forneces-te) não aumenta.

Output:

hmiguel@home ~/Desktop $ python popo.py
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1]


"Homem que é Homem não usa Java!"

Share this post


Link to post
Share on other sites
FenrisDK

oq eu falei q nao fica ..

ve a diferença ?!

                lista_1.insert( pos+i , lista_2[0] )

	lista_1[k+u] = lista_2[0]

Share this post


Link to post
Share on other sites
djthyrax

Assim sem testar, isto deve funcionar.

n1 = 8
n2 = 4
nrepeticoes = 20
s1 = [1]
s2 = [2]

lista = ((s1*n1)+(s2*n2))*nrepeticoes


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.