2014-12-19 21 views
1

我有以下代碼:使用從特定點填寫izip_longest

#!/bin/python 

from itertools import chain, izip_longest 
def filltape(n):  
    numlist = list(range(-(2*n)+1, (2*n)+1)) 
    alphalist= list("".join('BA' for i in xrange(n))) 
    print list(chain(*izip_longest(numlist, alphalist, fillvalue=' '))) 
filltape(4) 

,輸出是:

[-7, 'B', -6, 'A', -5, 'B', -4, 'A', -3, 'B', -2, 'A', -1, 'B', 0,'A', 1, ' ', 2, ' ', 3, ' ', 4, ' ', 5, ' ', 6, ' ', 7, ' ', 8, ' '] 

我無法弄清楚如何打印從中途短名單進入較長的名單,基本上我想輸出看起來像:

[-7, ' ', -6, ' ', -5, ' ', -4, ' ', -3, ' ', -2, ' ', -1, ' ', 0, ' ', 1, 'B', 2, 'A', 3, 'B', 4, 'A', 5, 'B', 6, 'A', 7, 'B', 8, 'A'] 

背景:我想解決this problem。實現這一目標(不是最有效的,雖然)

回答

1

的方法之一是扭轉名單,拉鍊和反向拉鍊:

>>> def filltape(n): 
... numlist = list(range(-(2*n)+1, (2*n)+1)) 
... alphalist= list("".join('BA' for i in xrange(n))) 
... print list(chain(*izip_longest(alphalist[::-1],numlist[::-1], fillvalue=' ')))[::-1] 
... 
>>> filltape(4) 
[-7, ' ', -6, ' ', -5, ' ', -4, ' ', -3, ' ', -2, ' ', -1, ' ', 0, ' ', 1, 'B', 2, 'A', 3, 'B', 4, 'A', 5, 'B', 6, 'A', 7, 'B', 8, 'A'] 
+1

這是可能的,但是這是他在這個問題想的輸出。 – fredtantini 2014-12-19 08:40:48

+0

我知道現在正在嘗試的是/可能不是解決ACM問題的方法,但是我想要的輸出是用fredtantini的答案實現的,謝謝! – 2014-12-19 08:50:17