使用izip_longest从特定点填写

时间:2014-12-19 08:26:15

标签: python icc

我有以下代码:

#!/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 个答案:

答案 0 :(得分:1)

实现此目的的一种方法(虽然不是最有效)是反转列表,压缩和反转zip:

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