所以我不得不寫一個代碼來找到網格中的所有對角線字串 mystery
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"]]
在一些專家的幫助下,這是我到目前為止所擁有的,因為我是新手。幫助我的專家是https://stackoverflow.com/users/5237560/alain-t
def diagsDownRight(M):
diags,pad = [],[]
while any(M):
edge = [*next(zip(*reversed(M))),*M[0][1:]]
M = [r[1:] for r in M[1:]]
diags.append(pad edge pad)
pad.append("")
return [*map("".join,zip(*diags))]
雖然這確實有效,但我自己發現很難理解,我不想只寫下我不理解的代碼。那么,任何人都可以幫助使代碼盡可能基本嗎?
當我的意思是盡可能基本時,我的意思是把自己想象成一個剛剛學習編程幾個月的人,請盡量簡化我的代碼。
uj5u.com熱心網友回復:
我能想到的最簡單的方法:填充行,使對角線變為列。編碼:
def diagsDownRight(M):
n = len(M)
m = [[''] * (n-i-1) row [''] * i for i, row in enumerate(M)] # pad rows
return [''.join(col) for col in zip(*m)]
結果是一樣的,而且 IMO 的方法更直觀
uj5u.com熱心網友回復:
考慮一個方陣
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
對角線的索引如下
d1 = [[0,0],[1,1],[2,2]]
d2 = [[0,1],[1,2]]
d3 = [[1,0],[2,1]]
d4 = [[2,0]]
d5 = [[0,2]]
要獲得中間對角線,您可以簡單地從索引開始
for i in range(3):
index = [i,i]
對于下一條對角線,我們只是做同樣的事情……但是將 x 偏移 1,直到超出邊界
for i in range(3):
if i 1 > 2:
break
index = [i, i 1]
對于下一個對角線,它是相同的......除了我們在另一個軸上做
for i in range(3):
if i 1 > 2:
break
index = [i 1, i]
對于最右上角(在這種情況下......)它是相同的,但我們添加了 2
for i in range(3):
if i 2 > 2:
break
index = [i, i 2]
最底部相同,但使用其他索引
for i in range(3):
if i 2 > 2:
break
index = [i 2, i]
我會讓你把它推斷為一個有效的解決方案
uj5u.com熱心網友回復:
這是一個更簡單的版本:
def diagsDownRight(M):
rows = len(M) # number of rows
cols = len(M[0]) # number of columns
result = [] # result will be a list of strings
leftSide = [(r,0) for r in range(rows)] # first column
topSide = [(0,c) for c in range(1,cols)] # first row
for r,c in leftSide[::-1] topSide: # all start positions
s = "" # string on the diagonal
while r < rows and c < cols:
s = M[r][c] # accumulate characters
r = 1 # move down
c = 1 # and to the right
result.append(s) # add diagonal string to result
return result
print(diagsDownRight(mystery))
['n', 'um', 'twr', 'prxw', 'xqsvo',
'rabbit', 'ayeot', 'wzig', 'bce', 'ih', 't']
它的作業方式是從左側和頂部位置的坐標開始,向右和向下累積字符,直到離開矩陣。
不過,我建議您使用 Marat 的解決方案。它簡單而優雅。如果你列印m矩陣我敢肯定,你會明白發生了什么
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351697.html
下一篇:Python練習元組,設定和串列
