Python的各種推導式(列表推導式,字典推導式,集合推導式)
- 列表(list)推導式
- 字典(dict)推導式
- 集合(set)推導式
列表推導式
語法:
varialbe = [out_exp_res for out_exp in input_list if out_exp == 2]
out_exp_res: 列表生成元素表達式,可以是有返回值的函數(shù)
for out_exp in input_list: 迭代input_list將out_exp傳入out_exp_res表達式中
if out_exp == 2: 根據(jù)條件過濾掉那些值可以
例1

例二,列表推導式中有函數(shù)的情況

例三,列表推導式中含有匿名函數(shù)的情況就比較復雜了,它得到的不再是一個數(shù)值列表,而是一個函數(shù)列表

如果中括號[]變成圓括號()得到的就是生成器
multiples = (i for i in range(30) if i % 3 is 0)
print(type(multiples))
# Output: <type 'generator'>
字典推導式
{key_expr:value_expr for value in collection if condition}
例一: 用字典推導式求一個字符串以及其長度

例二:用字典推導式求一個字符串,以及它的位置下標.

注意: 這里使用到了python中帶下標的遍歷enumerate()
list1 = ["這", "是", "一個", "測試"]
# 第一個是下標,后面的時候?qū)聵说闹?還可以指定從哪個下標開始.
for index, item in enumerate(list1, 1):
print index, item
>>>
1 這
2 是
3 一個
4 測試
例三: 大小寫key合并
# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/8 10:08'
mcase = {'a':10,'b':34,'A':7,'Z':3}
mcase_frequency = {
key.lower():mcase.get(key.lower(),0) + mcase.get(key.upper(),0) # 這個是獲取大小寫的值
for key in mcase.keys() if key in ['a','b'] # 這個是條件,最后過濾掉的就剩下['a','b']
}
print(mcase_frequency)

例四: 快速更換 key 和 value

集合推導式
它跟列表推導式是相似的,唯一的區(qū)別就是它使用的是大括號
{expr for value in collection if condition}
例一:
>> squared = {x**2 for x in [1,2,3]}
>> squared
{1, 4, 9}
例二 :用集合推導式創(chuàng)建字符串長度的集合
>> strings = ['a','is','with','if','file','exception']
>> {len(s) for s in strings}
{1, 2, 4, 9}
注意,元組沒有推導式.因為推導式換成括號的時候,就變成了生成器表達式