Re: [問題] 請問二維list一維化

看板Python作者 (Apua)時間11年前 (2014/09/12 13:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《ee55244 (阿一)》之銘言: : 我手邊有一些資料分別是3*3 ~ 13*13不等的二維方陣 : 我需要以方陣中心為起點,找到周圍最大值後以順時針方向將該方陣轉為一維的list, : 例如下列5*5方陣 : 1 2 3 4 5 : 6 7 8 9 10 : 11 12 13 14 15 : 16 17 18 19 20 : 21 22 23 24 25 : 要轉成13 19 18 17 12 7 8 9 14 20 25 24 23 22 21 16 11 6 1 2 3 4 5 10 15 對這題目有點興趣, 但原題敘述有點模糊. 反正是練習, 就改題目寫寫看. 以下是每層都找最大值為開頭, 有重複就隨意. .. 題外話, 變數不知道取啥好, 所以就亂寫了~ .. code:: python """ >>> M = [[1,2,3,4,5], ... [6,7,8,9,0], ... [1,2,3,4,5], ... [6,7,8,9,0], ... [1,2,3,4,5]] >>> print (f(M)) [3, 9, 4, 9, 8, 7, 2, 7, 8, 6, 1, 6, 1, 2, 3, 4, 5, 0, 5, 0, 5, 4, 3, 2, 1] """ def f(M): if len(M)==1: return M[0] else: L = M[0] + [row[-1] for row in M[1:-1]] + \ M[-1][::-1] + [row[0] for row in M[-2:0:-1]] head = L.index(max(L)) return f([row[1:-1] for row in M[1:-1]]) + \ L[head:] + L[:head] 原題以由內往外數第二層的最大值為起點, 但未敘述與下一層起點的關係. 從範例看來, 下一圈的起點可能是與上一圈 "平行" 的點, 但這會有含糊的地方: 範例中, 上一圈的起點為 B, 下一圈的起點為 D:: [ _ , _ , _ , _ , _ ] [ _ , _ , _ , _ , _ ] [ _ , _ , A , C , _ ] [ _ , _ , _ , B , D ] [ _ , _ , _ , _ , _ ] 但在以下例子, 下一圈的起點就分不出是誰:: [ _ , _ , _ , _ , _ ] [ _ , _ , _ , _ , _ ] [ _ , _ , A , _ , _ ] [ _ , _ , B , C , _ ] [ _ , _ , ? , ? , ? ] 我想乾脆改成, 第一圈確定了起點, 就從矩陣中心往外過第一圈起點延伸, 決定外圈起點:: [ _ , _ , _ , _ , D'] [ _ , _ , _ , B', _ ] [ D", B", A , _ , _ ] [ _ , _ , B , _ , _ ] [ _ , _ , D , _ , _ ] .. code:: python """ >>> M = [[1,2,3,4,5], ... [6,7,8,9,0], ... [1,2,3,4,5], ... [6,7,8,9,0], ... [1,2,3,4,5]] >>> print (g(M)) [3, 9, 4, 9, 8, 7, 2, 7, 8, 5, 0, 5, 0, 5, 4, 3, 2, 1, 6, 1, 6, 1, 2, 3, 4] """ def g(M): def h(M): L = M[0] + [row[-1] for row in M[1:-1]] + \ M[-1][::-1] + [row[0] for row in M[-2:0:-1]] if len(M)==3: head = L.index(max(L)) return [M[1][1]] + L[head:] + L[:head] , head else: _L , _head = h([row[1:-1] for row in M[1:-1]]) head = len(M)//2 * _head return _L + L[head:] + L[:head] , _head return M[0] if len(M)==1 else h(M)[0] -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.27.47 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1410529016.A.F6E.html
文章代碼(AID): #1K4lRuzk (Python)
討論串 (同標題文章)
文章代碼(AID): #1K4lRuzk (Python)