[Python]更加Pythonic的多個List合并和Python的安利,pythonpythonic

來源:互聯網
上載者:User

[Python]更加Pythonic的多個List合并和Python的安利,pythonpythonic

原題: https://segmentfault.com/q/1010000005904259

問題: 倘若存在 L=[ [1,2,3],[4,5,6],[7,8,9]] 這樣的列表,如何把合并成[1,2,3,4,5,6,7,8,9]呢?

 

最直接的方法(By:松林)
ret = []for x in L:    ret += xprint(x)

 

使用標準庫中的itertools模組(By:dokelung)
from itertools import chainlst = list(chain(*L))

這種方法由標準庫提供,顯然是更有效率,更加簡潔的.

注: * 操作符是起到一個參數列表解包的作用

 

有沒有一種更加Pythonic的方法,但又不使用標準庫?

答案是當然有,我們可以利用 List Comprehension 這個python中非常好用的技巧

myList = [x for j in L for x in j]

 

總結

三個解決方案中,方法1是最直接的方案, 方法2利用了已有的標準庫,一般情況有更好的效率.

方法3則是發揮Python的優點,畢竟Pythonic是每個Python程式員的目標,也是這個語言迷人的地方.

其實發這篇文章主要是順帶安利下Python, 一段Pythonic的代碼具有很好的觀賞性, Python也提供了很多Pythonic的特性.

 

例如 上面提到的 LIst Comprehension 的方法來構造一個序列(列表,元組,字典), 其他語言要實現的話一般就要用lambda運算式,

個人而言是排斥lambda運算式的, 可讀性方面它不如直接定義函數,而且也缺少對稱性的優美.

 

再例如Python 的Slice(切片),也是一個很有用,很優美的技巧.

最經典的字串反轉, python可以這樣寫

s = "Hello, World!"print(s[::-1]) # 具體解釋可以看python文檔,這裡利用的是使步長為-1

間隔抽樣可以這樣寫

L = [1,2,3,4,5........]print(L[::3]) #3 為步進長度,可以取出1,4,7....

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.