列表推導(list comprehensions)
場景1:將一個三維列表中所有一維數據為a的元素合并,組成新的二維列表。
最簡單的方法:新建列表,遍歷原三維列表,判斷一維數據是否為a,若為a,則將該元素append至新列表中。
缺點:代碼太繁瑣,對于Python而言,執行速度會變慢很多。
針對場景1,我們首先應該想到用列表解析式來解決處理,一行代碼即可解決:
lista = [item for item in array if item[0] == 'a']
那么,何為列表解析式?
官方解釋:列表解析式是Python內置的非常簡單卻強大的可以用來創建list的生成式。
強大具體如何體現?
可以看到,使用列表解析式的寫法更加簡短,除此之外,因為是Python內置的用法,底層使用C語言實現,相較于編寫Python代碼而言,運行速度更快。
場景2: 對于一個列表,既要遍歷索引又要遍歷元素。
這里可以使用Python內建函數enumerate,在循環中更好的獲取獲得索引。
array = ['I', 'love', 'Python']for i, element in enumerate(array): array[i] = '%d: %s' % (i, seq[i])
可以使用列表推導式對其進行重構:
def getitem(index, element): return '%d: %s' % (index, element)array = ['I', 'love', 'Python']arrayIndex = [getitem(index, element) for index, element in enumerate(array)]
據說這種寫法更加的Pythonic。
總結:如果要對現有的可迭代對象做一些處理,然后生成新的列表,使用列表推導式將是最便捷的方法。
迭代器和生成器
迭代器(Iterator)
這里的迭代可以指for循環,在Python中,對于像list,dict和文件等而言,都可以使用for循環,但是它們并不是迭代器,它們屬于可迭代對象。
什么可迭代對象
最簡單的解釋:可以使用for...in...語句進行循環的對象,就是可迭代對象(Iterable),可以使用isinstance()方法進行判斷。
from collections import Iterable type = isinstance('python', Iterable)print type
什么是迭代器
迭代器指的是可以使用next()方法來回調的對象,可以對可迭代對象使用iter()方法,將其轉換為迭代器。
temp = iter([1, 2, 3])print type(temp)print next(temp)
此時temp就是一個迭代器。所以說,迭代器基于兩個方法:
next:返回下一個項目 iter 返回迭代器本身可理解為可被next()函數調用并不斷返回下一個值的對象就是迭代器,在定義一個裝飾器時將需要同時定義這兩個方法。
迭代器的優勢
在構建迭代器時,不是將所有的元素一次性的加載,而是等調用next方法時返回元素,所以不需要考慮內存的問題。
迭代器應用場景
新聞熱點
疑難解答