CheckIO題解:OLD LIBRAY 裡的部分題目
阿新 • • 發佈:2019-02-17
這裡只有OLD LIBRAY 裡的部分題目,其他的還沒做。
Dot in numbers
我的方法就一行:
re.sub(r'(\d)(?=(\d\d\d)+(?!(\d|th)))', r'\1.', txt)
用到正則表示式裡環視功能。具體可以參考《精通正則表示式》的環視部分章節。
簡單來說就是,匹配一個數字後有且僅有3的倍數個數字的位置
All in row
def checkio(arr): 'convert all elements in arr in one row' l = [i for i in list_iter(arr)] return l def list_iter(nested): try: for sublist in nested: for element in list_iter(sublist): yield element except TypeError: yield nested
這裡用到了生成器,可以參考《Python基礎教程》裡遞迴生成器部分。
程式碼裡精煉的使用try、except 而不必使用 if isinstance() 也是參考的書上的例子。
Transposed Matrix
#最短的方法
list(map(list, zip(*matr)))
#我的方法
[[matr[i][j] for i in range(len(matr))] for j in range(len(matr[0]))]
這裡是我沒有理解內建函式zip,以至於寫了這幾層巢狀。zip()函式接受多個列表作為引數,將各個列表的元素按相同索引組成組元並形成新的列表。各個組元的長度為引數中最短的列表長。如:
>>> list(zip(['a', 'b'], [1, 2], ['c', 'd', 'e'])) [('a', 1, 'c'), ('b', 2, 'd')]