如何让 python 按特定顺序打印出所有字母?

How can I let python print out all the letters in specific orders?

所以我想创建 4 个函数:func_slideright() func_slideleft() func_up()func_left() 将像这样从网格中查找并打印所有单词。

[["r","a","w","b","i","t"],
["x","a","y","z","c","h"],
["p","q","b","e","i","e"],
["t","r","s","b","o","g"],
["u","w","x","v","i","t"],
["n","m","r","w","o","t"]]

所以基本上... func_slideright() 将 return 网格中的每个字母水平从左到右..所以输出应该是这样的。

n
um
twr
prxw
xqsvo

等等... 而 func_slideleft() 将打印出 sliderright 的反面,所以像...

t
ih
bce
wzig 

等等.... 而 func_up() 将 return 个字母从上到下像

rxptun
aaqrwm
wybsxr

等等... 和 func_left() returns 从左到右的所有字母,如

 rawbit
 xayczh

等等... 另外 word: str 基本上是我试图找到它是否在网格上的词。

但是,我完全不知道该怎么做。由于某种原因,我的脑海中似乎没有任何代码或程序可以点击,所以有人可以帮忙吗? ** 另外,如果你慷慨地帮助我,请考虑以最简单的方式写作,并请解释一下,以便我可以学习而不是在这里重复提问。谢谢 :))**

到目前为止,这是我的代码。任何帮助将不胜感激...

grid = [["r","a","w","b","i","t"],
["x","a","y","z","c","h"],
["p","q","b","e","i","e"],
["t","r","s","b","o","g"],
["u","w","x","v","i","t"],
["n","m","r","w","o","t"]]

def func_left(word, grid):
    word = list(word)
    for x in grid:
        if grid.index(word[x]) != 1:
           return word
print(func_left(word='raw', grid=[["r","a","w","b","i","t"],
["x","a","y","z","c","h"],
["p","q","b","e","i","e"],
["t","r","s","b","o","g"],
["u","w","x","v","i","t"],
["n","m","r","w","o","t"]]))

def func_slideleft(word, grid):
    word = list(word)
    ** I have no idea how to find this or how to find sliderright

def func_sliderright(word, grid):
    word = list(word)
    ** I have no idea how to find this or how to find sliderright

def func_up(word):
    word = list(word)
    for x in grid:
        return x[1]

假设您实际上想要矩阵中的所有对角线,这里有 4 个函数将给出通过向右、向下、右下和右上形成的字符串:

def diagsDownRight(M):
    diags,pad = [],[]
    while any(M):
        edge = [*next(zip(*reversed(M))),*M[0][1:]] # outer edge
        M    = [r[1:] for r in M[1:]]               # remaining matrix
        diags.append(pad+edge+pad)                  # diagonal columns
        pad.append("")                              # next padding
    return [*map("".join,zip(*diags))]              # join columns

def diagsUpRight(M):
    diags,pad = [],[]
    while any(M):
        edge = [*next(zip(*M)), *M[-1][1:]]
        M    = [r[1:] for r in M[:-1]]
        diags.append(pad+edge+pad)
        pad.append("")        
    return [*map("".join,zip(*diags))]

def rows(M):
    return ["".join(row) for row in M]
def cols(M):
    return ["".join(col) for col in zip(*M)]

输出:

mystery = [["r","a","w","b","i","t"],
           ["x","a","y","z","c","h"],
           ["p","q","b","e","i","e"],
           ["t","r","s","b","o","g"],
           ["u","w","x","v","i","t"],
           ["n","m","r","w","o","t"]]


print(diagsDownRight(mystery))
['n', 'um', 'twr', 'prxw', 'xqsvo', 'rabbit', 
 'ayeot', 'wzig', 'bce', 'ih', 't']

print(diagsUpRight(mystery))
['r', 'xa', 'paw', 'tqyb', 'urbzi', 'nwsect', 
 'mxbih', 'rvoe', 'wig', 'ot', 't']

print(rows(mystery))
['rawbit', 'xayzch', 'pqbeie', 'trsbog', 'uwxvit', 'nmrwot']

print(cols(mystery))
['rxptun', 'aaqrwm', 'wybsxr', 'bzebvw', 'icioio', 'thegtt']

rows() 和 cols() 函数很简单,但对角线有点棘手。

对于对角线,矩阵被分解成 L 形切片,每边用空字符填充。然后将这些切片组合起来形成对角线字符串

例如:

Slice #1: (_ are empty padding characters)

r a w b i t --> r a w b i t --> n u t p x r a w b i t
x a y z c h --> x . . . . .
p q b e i e --> p . . . . .
t r s b o g --> t . . . . .
u w x v i t --> u . . . . .
n m r w o t --> n . . . . .

Slice #2
. . . . . . 
. a y z c h --> a y z c h   --> _ m w r q a y z c h _
. q b e i e --> q . . . .
. r s b o g --> r . . . .
. w x v i t --> w . . . .
. m r w o t --> m . . . .

Slice #3:
. . . . . . 
. . . . . . 
. . b e i e --> b e i e    --> _ _ r x s b e i e _ _
. . s b o g --> s . . .
. . x v i t --> x . . .
. . r w o t --> r . . .

Slice # 4                  --> _ _ _ w v b o g _ _ _
Slice # 5                  --> _ _ _ _ o i t _ _ _ _
Slice # 6                  --> _ _ _ _ _ t _ _ _ _ _

然后,将每个切片的元素从 1 连接到 6 得到每个对角线的字符串:

1 2 3 4 5 6
n _ _ _ _ _
u m _ _ _ _
t w r _ _ _
p r x w _ _
x q s v o _
r a b b i t
a y e o t _
w z i g _ _ 
b c e _ _ _
i h _ _ _ _
t _ _ _ _ _