2010-11-28 49 views
2

我有這樣的代碼:Python的循環(在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 

它給了我這樣的:

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

基本上,它插入在位置2倍list_bsize

我想要一個循環重複自己,以便list_b插入的次數定義在number但重新泥炭size次。這很難解釋,所以這裏是結果,我想:

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

編輯

,如果我有這樣的:

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

我想獲得這樣的:

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

因爲這是一個例子,list_a,s和n會有所不同,我怎麼能在一個或兩個循環中做到這一點?

感謝,

Favolas

+2

請使用pprint輸出 - 這是種難以閱讀。 – robert 2010-11-28 22:55:08

+0

護目鏡什麼都不做。 – 2010-11-28 22:56:57

+0

@Ignacio我試過但沒有找到解決方案。也許我做錯了什麼 – Favolas 2010-11-28 23:03:06

回答

5

對於參數的緣故,我會打電話給('a', 'a', 'a') => a('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 

結果=>

['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] 
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)) 
相關問題