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

首頁 > 編程 > Python > 正文

Python高級(jí)用法總結(jié)

2020-02-15 21:31:16
字體:
供稿:網(wǎng)友

列表推導(dǎo)(list comprehensions)

場(chǎng)景1:將一個(gè)三維列表中所有一維數(shù)據(jù)為a的元素合并,組成新的二維列表。

最簡(jiǎn)單的方法:新建列表,遍歷原三維列表,判斷一維數(shù)據(jù)是否為a,若為a,則將該元素append至新列表中。
缺點(diǎn):代碼太繁瑣,對(duì)于Python而言,執(zhí)行速度會(huì)變慢很多。

針對(duì)場(chǎng)景1,我們首先應(yīng)該想到用列表解析式來解決處理,一行代碼即可解決:

lista = [item for item in array if item[0] == 'a']

那么,何為列表解析式?

官方解釋:列表解析式是Python內(nèi)置的非常簡(jiǎn)單卻強(qiáng)大的可以用來創(chuàng)建list的生成式。

強(qiáng)大具體如何體現(xiàn)?

可以看到,使用列表解析式的寫法更加簡(jiǎn)短,除此之外,因?yàn)槭荘ython內(nèi)置的用法,底層使用C語言實(shí)現(xiàn),相較于編寫Python代碼而言,運(yùn)行速度更快。

場(chǎng)景2: 對(duì)于一個(gè)列表,既要遍歷索引又要遍歷元素。

這里可以使用Python內(nèi)建函數(shù)enumerate,在循環(huán)中更好的獲取獲得索引。

array = ['I', 'love', 'Python']for i, element in enumerate(array):  array[i] = '%d: %s' % (i, seq[i])

可以使用列表推導(dǎo)式對(duì)其進(jìn)行重構(gòu):

def getitem(index, element):  return '%d: %s' % (index, element)array = ['I', 'love', 'Python']arrayIndex = [getitem(index, element) for index, element in enumerate(array)]

據(jù)說這種寫法更加的Pythonic。

總結(jié):如果要對(duì)現(xiàn)有的可迭代對(duì)象做一些處理,然后生成新的列表,使用列表推導(dǎo)式將是最便捷的方法。

迭代器和生成器

迭代器(Iterator)

這里的迭代可以指for循環(huán),在Python中,對(duì)于像list,dict和文件等而言,都可以使用for循環(huán),但是它們并不是迭代器,它們屬于可迭代對(duì)象。

什么可迭代對(duì)象

最簡(jiǎn)單的解釋:可以使用for...in...語句進(jìn)行循環(huán)的對(duì)象,就是可迭代對(duì)象(Iterable),可以使用isinstance()方法進(jìn)行判斷。

from collections import Iterable type = isinstance('python', Iterable)print type

什么是迭代器
迭代器指的是可以使用next()方法來回調(diào)的對(duì)象,可以對(duì)可迭代對(duì)象使用iter()方法,將其轉(zhuǎn)換為迭代器。

temp = iter([1, 2, 3])print type(temp)print next(temp)

此時(shí)temp就是一個(gè)迭代器。所以說,迭代器基于兩個(gè)方法:

next:返回下一個(gè)項(xiàng)目 iter 返回迭代器本身

可理解為可被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象就是迭代器,在定義一個(gè)裝飾器時(shí)將需要同時(shí)定義這兩個(gè)方法。

迭代器的優(yōu)勢(shì)

在構(gòu)建迭代器時(shí),不是將所有的元素一次性的加載,而是等調(diào)用next方法時(shí)返回元素,所以不需要考慮內(nèi)存的問題。

迭代器應(yīng)用場(chǎng)景

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柞水县| 永登县| 牟定县| 南平市| 万全县| 招远市| 通辽市| 巴南区| 桃源县| 德格县| 桐乡市| 昂仁县| 嘉义市| 加查县| 宁安市| 英超| 连云港市| 南开区| 兰溪市| 明星| 都昌县| 四平市| 三都| 全椒县| 扎囊县| 沿河| 平顺县| 汤原县| 博野县| 望江县| 罗甸县| 云梦县| 津南区| 呼伦贝尔市| 苏尼特右旗| 深州市| 桃园市| 深泽县| 惠来县| 中超| 滁州市|