Python 在矩阵的对角线中添加单词的所有迭代

Python 在矩阵的对角线中添加单词的所有迭代,python,arrays,matrix,Python,Arrays,Matrix,假设我有以下矩阵: matrix = [ ['a', 'p', 'p', 'l', 'e'], ['a', 'g', 'o', 'd', 'o'], ['n', 'n', 'e', 'r', 't'], ['g', 'a', 'T', 'A', 'C'], ['m', 'i', 'c', 's', 'r'], ['P', 'o', 'P', 'o', 'P']] 这段代码以“向右移的对角线”的方式打印每个“单词”,不包括大对角线: for i in range(len(matrix)

假设我有以下矩阵:

matrix = [
['a', 'p', 'p', 'l', 'e'],
['a', 'g', 'o', 'd', 'o'],
['n', 'n', 'e', 'r', 't'],
['g', 'a', 'T', 'A', 'C'],
['m', 'i', 'c', 's', 'r'],
['P', 'o', 'P', 'o', 'P']]
这段代码以“向右移的对角线”的方式打印每个“单词”,不包括大对角线:

    for i in range(len(matrix) - 1):
      for j in range(i, -1, -1):
        print(matrix[j][i-j])
输出:
a a p n g p g n o l m a e d e
从这里开始,我有两个问题,我希望它打印包含的大对角线,但每次尝试都会导致索引超出范围,我希望它打印单词的每个字母,如下所示:


‘a’、‘a’、‘ap’、‘p’、‘n’、‘ngp’、‘g’、‘gp’、‘p’等……。

没有numpy是非常乏味的:

>>> matrix = np.array(matrix)
>>> diagonals = [np.fliplr(matrix).diagonal(i) for i in range(matrix.shape[1]-1,-1,-1)]
>>> diagonals
[array(['a'], dtype='<U1'),
 array(['p', 'a'], dtype='<U1'),
 array(['p', 'g', 'n'], dtype='<U1'),
 array(['l', 'o', 'n', 'g'], dtype='<U1'),
 array(['e', 'd', 'e', 'a', 'm'], dtype='<U1')]
>>> def powerset(lst):
    n = lst
    return [i for i in chain.from_iterable(combinations(n, r) for r in range(len(n)+1)) if i]
>>> sum([list(powerset(d)) for d in diagonals],[])
[('a',),
 ('p',),
 ('a',),
 ('p', 'a'),
 ('p',),
 ('g',),
 ('n',),
 ('p', 'g'),
 ('p', 'n'),
 ('g', 'n'),
 ('p', 'g', 'n'),
 ('l',),
 ('o',),
 ('n',),
 ('g',),
 ('l', 'o'),
...
>>> print(*[''.join(i) for i in sum([list(powerset(d)) for d in diagonals],[])], sep = ', ')
a, p, a, pa, p, g, n, pg, pn, gn, pgn, l, o, n, g, lo, ln, lg, on, og, ng, lon, log, lng, ong, long, e, d, e, a, m, ed, ee, ea, em, de, da, dm, ea, em, am, ede, eda, edm, eea, eem, eam, dea, dem, dam, eam, edea, edem, edam, eeam, deam, edeam

因为这个矩阵不是正方形矩阵,所以没有大的对角线,对吗?
>>> def powerset(lst):
    n = lst
    return [i for i in chain.from_iterable(combinations(reversed(n), r) for r in range(len(n)+1)) if i]
>>> print(*[''.join(i) for i in sum([list(powerset(d)) for d in diagonals],[])], sep = ', ')
a, a, p, ap, n, g, p, ng, np, gp, ngp, g, n, o, l, gn, go, gl, no, nl, ol, gno, gnl, gol, nol, gnol, m, a, e, d, e, ma, me, md, me, ae, ad, ae, ed, ee, de, mae, mad, mae, med, mee, mde, aed, aee, ade, ede, maed, maee, made, mede, aede, maede