看板 Python 關於我們 聯絡資訊
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
TuCH: 看不太懂 複製? 01/17 08:41
https://github.com/JasonLiTW/simple-railway-captcha-solver#23-load-the-training-set 我在研究中間這個演算法有沒有其他寫法 ※ 編輯: sharkbay (211.75.195.103 臺灣), 01/17/2020 10:20:04
sharkbay: 發文後才看懂它這個演算法是轉置+平坦化 01/17 10:27