python推導式的使用方法實例
前言
推導式提供瞭更簡潔高效的方法來生成序列而又不失代碼的可讀性。
定義: 推導式是 Python 裡很有用的一個特性,它可以用一行代碼就可以創建一個新的序列(比如:列表,集合,字典等等)。通過這個性能,不僅可以少寫很多代碼,而且性能上也更快。
Python 裡有四種推導式:
- 列表推導式(List Comprehensions)
- 字典推導式(Dictionary Comprehensions)
- 集合推導式(Set Comprehensions)
- 生成器推導式(Generator Comprehensions)
一、列表推導式(List Comprehensions)
假如你有一個列表,你想去掉該列表中的所有負數,那通常的做法使用 for 循環
numbers=[1,-2,3,-4,5] new_nums=[] for num in numbers: if num>0: new_nums.append(num) print(new_nums)
輸出結果:
但如果我們用列表推導式來實現,那麼這個過程就短得多,隻需要一行代碼:
numbers=[1,-2,3,-4,5] new_nums=[num for num in numbers if num>0] print(new_nums)
輸出結果同上。
列表推導式的結構:
output_list = [expression for var in input_list if condition]
這裡的 if condition 語句並不是必須有的。
二、字典推導式(Dictionary Comprehensions)
跟列表推導式一樣,通過同樣方式生成字典的方法,就是字典推導式。
假如你想從一個全是數字的列表來創建一個字典,列表裡的數字作為 key, 數字的的字符串值作為 value, 然後再某個限制條件,最終獲得你想要的字典數據:
nums=[1,2,3,4,5,6,7,8] dict={} for num in nums: if num %2 == 0: dict[num] = str(num) print(dict)
輸出結果:
如果我們使用字典推導式,就會簡潔的多:
nums=[1,2,3,4,5,6,7,8] dict={num:str(num) for num in nums if num % 2 == 0} print(dict)
輸出結果同上。
字典推導式的模板:
{key:value for (key,value) in dict if key,value satisfy condition}
三、集合推導式(Set Comprehensions)
集合推導式跟列表推導式差不多。就比如我們要把一個全是數字的列表中的奇數組成一個集合,用 for 循環的話:
numbers=[1,2,3,4,5,6,7,8] filtered_nums=set() for num in numbers: if num %2 == 0: filtered_nums.add(num) print(filtered_nums)
輸出結果:
如果我們使用集合表達式來表示:
numbers=[1,2,3,4,5,6,7,8] filtered_nums={num for num in numbers if num %2 == 0} print(filtered_nums)
輸出結果同上。
註意: 集合推導式除瞭是使用 {} 外,其他形式都跟列表推導式一樣。
四、生成器推導式(Generator Comprehensions)
生成器推導式(或叫生成器表達式),其結構也跟列表表達式相似。
例如我們將數字列表中各項平方運算並排除奇數項:
def square_even(numbers): for number in numbers: if number % 2 == 0: yield (number * number) numbers=[1,2,3,4,5,6] square_numbers=square_even(numbers) for number in square_numbers: print(number)
輸出結果:
使用生成器推導式顯示為:
numbers=[1,2,3,4,5,6] square_numbers=(num *num for num in numbers if num % 2 ==0) for number in square_numbers: print(number)
輸出結果同上。
註意: 生成器推導式是使用 () ,其他基本結構跟列表推導式一樣。
總結
到此這篇關於python推導式的使用方法的文章就介紹到這瞭,更多相關python推導式使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python高級特性之切片迭代列表生成式及生成器詳解
- 分享18 個 Python 高效編程技巧
- python基礎學習之生成器與文件系統知識總結
- 在Python中如何使用yield
- python3使用迭代生成器實現減少內存占用