您可以利用每个对角线的索引总和为给定整数这一事实来实现这一点。
给定一个列表lst,我们有:
diagonals = [[''.join(c for j,c in enumerate(s) if i+j == n)
for i,s in enumerate(lst)]
for n in range(len(lst[0]))]
或者在这个特定的例子中:
In [15]: lst = ['arvsstng', 'examplet', 'gznputxm', 'vahgiktf']
In [16]: [[''.join(c for j,c in enumerate(s) if i+j == n) for i,s in enumerate(lst)] for n in range(len(lst[0]))]
Out[16]:
[['a', '', '', ''],
['r', 'e', '', ''],
['v', 'x', 'g', ''],
['s', 'a', 'z', 'v'],
['s', 'm', 'n', 'a'],
['t', 'p', 'p', 'h'],
['n', 'l', 'u', 'g'],
['g', 'e', 't', 'i']]
如果您想在输出中包含不同长度的列表,您可以对其运行过滤器:
In [18]: diagonals = [filter(None, sublst) for sublst in diagonals]
In [19]: diagonals
Out[19]:
[['a'],
['r', 'e'],
['v', 'x', 'g'],
['s', 'a', 'z', 'v'],
['s', 'm', 'n', 'a'],
['t', 'p', 'p', 'h'],
['n', 'l', 'u', 'g'],
['g', 'e', 't', 'i']]