2010-11-28 7 views
2

Ich habe diesen Code:Python-Schleife (insert Elemente in einer Liste an dermined Plätze)

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 

es gibt mir diese:

[('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')] 

im Grunde, es fügt 2 mal die list_b in der Position definiert durch size

Ich möchte eine Schleife, die sich wiederholt, so dass list_b ist die Anzahl der Male eingefügt in number aber re definiert Torf size mal. Es ist schwierig zu erklären, so hier ist das Ergebnis, was ich will:

[('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

und wenn ich dies hatte:

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

Ich möchte dies erhalten:

[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] 

da dies ein Beispiel ist und list_a, s und n variieren wird, wie kann ich Mach das in ein oder zwei Schleifen?

Danke,

Favolas

+2

Bitte geben Sie die pprint Ausgang verwenden - diese Art von schwer zu lesen. – robert

+0

Die Brille macht nichts. –

+0

@Ignacio Ich habe versucht, aber habe keine Lösung gefunden. Wahrscheinlich mache ich etwas falsch – Favolas

Antwort

5

Aus Gründen des Arguments, werde ich die ('a', 'a', 'a') => a und ('b', 'b', 'b') => b nennen.

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 

Ergebnisse in =>

['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

Immer wenn Sie ein neues Element zu einem einfügen, erhöht die len (a) von a. Du hast vergessen, das in Betracht zu ziehen. –

+0

Hallo zusammen. Das funktioniert, aber ich verstehe es nicht. In diesem Fall ist der Bereich (len (a) // s * s, 0, -s) derselbe wie der Bereich (0,0, -5), so dass der Bereich in einem -5 Sprung von 0 bis 0 geht. Das ergibt für mich keinen Sinn. Ich habe meinen ersten Post bearbeitet, um zu sehen, ob Sie mir helfen können. Danke – 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

Danke für die Antwort, aber ich kann keine Module verwenden. Nur grundlegende Programmierung. – Favolas

Verwandte Themen