国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

介紹Python中的一些高級編程技巧

2020-02-23 00:31:31
字體:
供稿:網(wǎng)友

 正文:

本文展示一些高級的Python設計結(jié)構和它們的使用方法。在日常工作中,你可以根據(jù)需要選擇合適的數(shù)據(jù)結(jié)構,例如對快速查找性的要求、對數(shù)據(jù)一致性的要求或是對索引的要求等,同時也可以將各種數(shù)據(jù)結(jié)構合適地結(jié)合在一起,從而生成具有邏輯性并易于理解的數(shù)據(jù)模型。Python的數(shù)據(jù)結(jié)構從句法上來看非常直觀,并且提供了大量的可選操作。這篇指南嘗試將大部分常用的數(shù)據(jù)結(jié)構知識放到一起,并且提供對其最佳用法的探討。
推導式(Comprehensions)

如果你已經(jīng)使用了很長時間的Python,那么你至少應該聽說過列表推導(list comprehensions)。這是一種將for循環(huán)、if表達式以及賦值語句放到單一語句中的一種方法。換句話說,你能夠通過一個表達式對一個列表做映射或過濾操作。

一個列表推導式包含以下幾個部分:

    一個輸入序列     一個表示輸入序列成員的變量     一個可選的斷言表達式     一個將輸入序列中滿足斷言表達式的成員變換成輸出列表成員的輸出表達式

舉個例子,我們需要從一個輸入列表中將所有大于0的整數(shù)平方生成一個新的序列,你也許會這么寫:
 

num = [1, 4, -5, 10, -7, 2, 3, -1]filtered_and_squared = [] for number in num: if number > 0: filtered_and_squared.append(number ** 2)print filtered_and_squared # [1, 16, 100, 4, 9]

很簡單是吧?但是這就會有4行代碼,兩層嵌套外加一個完全不必要的append操作。而如果使用filter、lambda和map函數(shù),則能夠?qū)⒋a大大簡化:
 

num = [1, 4, -5, 10, -7, 2, 3, -1]filtered_and_squared = map(lambda x: x ** 2, filter(lambda x: x > 0, num))print filtered_and_squared # [1, 16, 100, 4, 9]

嗯,這么一來代碼就會在水平方向上展開。那么是否能夠繼續(xù)簡化代碼呢?列表推導能夠給我們答案:
 

num = [1, 4, -5, 10, -7, 2, 3, -1]filtered_and_squared = [ x**2 for x in num if x > 0]print filtered_and_squared # [1, 16, 100, 4, 9]

    迭代器(iterator)遍歷輸入序列num的每個成員x     斷言式判斷每個成員是否大于零     如果成員大于零,則被交給輸出表達式,平方之后成為輸出列表的成員。

列表推導式被封裝在一個列表中,所以很明顯它能夠立即生成一個新列表。這里只有一個type函數(shù)調(diào)用而沒有隱式調(diào)用lambda函數(shù),列表推導式正是使用了一個常規(guī)的迭代器、一個表達式和一個if表達式來控制可選的參數(shù)。

另一方面,列表推導也可能會有一些負面效應,那就是整個列表必須一次性加載于內(nèi)存之中,這對上面舉的例子而言不是問題,甚至擴大若干倍之后也都不是問題。但是總會達到極限,內(nèi)存總會被用完。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兰县| 德兴市| 镇江市| 手机| 林芝县| 内丘县| 遂溪县| 玉门市| 崇文区| 若尔盖县| 孟州市| 黄陵县| 海伦市| 萝北县| 石狮市| 南安市| 英吉沙县| 曲周县| 新密市| 左权县| 梁山县| 酒泉市| 北宁市| 荣昌县| 东光县| 正镶白旗| 章丘市| 台东市| 抚顺县| 鄂托克前旗| 龙州县| 思茅市| 银川市| 育儿| 永宁县| 太原市| 承德县| 锡林郭勒盟| 鄂托克旗| 漳浦县| 霍州市|