2010-11-28 4 views
2

Je possède ce code:boucle Python (éléments d'insertion dans une liste à des endroits dermined)

number = 2 
size = 5 
list_b = [("b","b","b")] 
list_a = [("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a")] 
for i in range(number): 
    list_a.insert(size,list_b) 
print list_a 

il me donne ceci:

[('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('b', 'b', 'b'), 
('b', 'b', 'b'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a')] 

fondamentalement, il insère 2 fois la list_b dans la position défini par size

Je veux une boucle qui se répète de sorte que list_b est inséré le nombre de fois défini dans number mais re tourbe size fois. Il est difficile d'expliquer, alors voici le résultat que je veux:

[('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('b', 'b', 'b'), 
('b', 'b', 'b'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('b', 'b', 'b'), 
('b', 'b', 'b'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('b', 'b', 'b'), 
('b', 'b', 'b'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('b', 'b', 'b'), 
('b', 'b', 'b'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('a', 'a', 'a'), 
('b', 'b', 'b'), 
('b', 'b', 'b'),...and so on] 

EDIT

et si j'avais ceci:

list_a = [a, ] * 15 
list_b = [b,] 
s = 5 
n = 2 

Je veux obtenir ceci:

[b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b] 

puisqu'il s'agit d'un exemple et que list_a, s et n varient, comment puis-je le faire en une ou deux boucles?

Merci,

Favolas

+2

S'il vous plaît utiliser la sortie pprint - ce qui est difficile à lire en quelque sorte. – robert

+0

Les lunettes ne font rien. –

+0

@Ignacio J'ai essayé mais je n'ai pas trouvé de solution. Probablement que je fais quelque chose de mal – Favolas

Répondre

5

Par souci de l'argument, je vais appeler le ('a', 'a', 'a') => a et ('b', 'b', 'b') => b.

number=2 
size=5 
list_a=["a"]*20 
list_b=["b"] 

workfor=len(list_a)+(len(list_a)/size)*number*len(list_b) 
i=0 
while i<workfor: 
    i+=size 
    for times in range(number): 
     for elem in list_b: 
      list_a.insert(i,elem) 
     i+=len(list_b) 

print list_a 

Résultats dans =>

['a', 'a', 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'a', 'b', 'b'] 
0
>>> s,n=5,2 
>>> a=[1,]*17 
>>> b=2 
>>> for i in range(len(a)//s*s,0,-s): 
    for j in range(n): 
     a.insert(i,b) 

>>> a 
[1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1] 
+0

Chaque fois que vous insérez un nouvel élément à un, le len (a) de a augmente. Vous avez oublié de prendre cela en considération. –

+0

Salut à tous. Cela fonctionne mais je ne comprends pas. Dans ce cas, range (len (a) // s * s, 0, -s) sera le même que range (0,0, -5) donc la plage va de 0 à 0 dans un -5 jump ?? Cela n'a aucun sens pour moi. J'ai édité mon post initial pour voir si vous pouvez m'aider. Merci – Favolas

1
#!/usr/bin/python 

number = 2 
size = 5 
list_b = [("b","b","b")] 
list_a = [("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a"),("a","a","a")] 

if __name__ == '__main__': 
    insertion_count = len(list_a)/size 
    for j in xrange(insertion_count): 
     # compute insertion position 
     pos = (j+1)*size + j * number 
     for i in range(number): 
      list_a.insert(pos,list_b) 
    print list_a 
1
from itertools import chain, izip, repeat 

list_a = [('a', 'a', 'a')] * 15 
list_b = [('b', 'b', 'b')] 

a5b2s = [iter(list_a)] * 5 + [repeat(*list_b)] * 2 
list_a[:] = chain.from_iterable(izip(*a5b2s)) 
+0

Merci pour la réponse, mais je ne peux pas utiliser de modules. Juste une programmation de base. – Favolas

Questions connexes