[問題] 請教將List拆掉的方法

看板Python作者 (Shark Bay)時間5年前 (2020/01/16 23:41), 5年前編輯推噓1(101)
留言2則, 2人參與, 5年前最新討論串1/1
Code : https://ideone.com/odVysm # Python 3.7.4 (default, Aug 9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] import random # 產生初值 i j a = [[[random.choice(range(10)) for _1 in range(3)] for _2 in range(4)] for _3 in range(5)] # 直觀做法, 先將j拆掉做i次並且複製i個 b = [[]] * len(a[0]) for index in range(len(a[0])): b[index].extend([arr[index] for arr in a]) # 迂迴作法, 先將a[i][j]轉置, 然後用sum拆掉, 再複製i個 c = [sum([[a[j][i] for j in range(len(a))] for i in range(len(a[0]))], [])] * len(a[0]) # 補一個等效C, 只不過用 map zip做轉置 d = [sum([r for r in map(list, zip(*a))], [])] * len(a[0]) (1)想請問除了方法C還有沒有其他做法可以達成List B? (2)請問2D List轉置/平坦化最快的寫法是哪個? 自問自答: 最終選了這個方法 import itertools flatten = lambda l : list(itertools.chain(*l)) transpose = lambda l : [flatten(l)[i::len(l[0])] for i in range(len(l[0]))] e = [flatten(transpose(a))]*len(a[0]) (3) 那反平坦化呢? un1/un2 那個比較好? un1 = lambda l,n : transpose([l[i::n] for i in range(n)]) x=un1(e[0],len(a)) un2 = lambda l,n : [l[idx:idx+n] for idx in range(0, len(l), n)] y = un2(e[0],len(a)) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.34.9 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1579189272.A.4B3.html ※ 編輯: sharkbay (106.1.34.9 臺灣), 01/17/2020 06:40:47

01/17 08:41, 5年前 , 1F
看不太懂 複製?
01/17 08:41, 1F
https://github.com/JasonLiTW/simple-railway-captcha-solver#23-load-the-training-set 我在研究中間這個演算法有沒有其他寫法 ※ 編輯: sharkbay (211.75.195.103 臺灣), 01/17/2020 10:20:04

01/17 10:27, 5年前 , 2F
發文後才看懂它這個演算法是轉置+平坦化
01/17 10:27, 2F
文章代碼(AID): #1U88GOIp (Python)
文章代碼(AID): #1U88GOIp (Python)