我有以下代码:
#!/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。
答案 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']