Python中各種推導式

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}

注意,元組沒有推導式.因為推導式換成括號的時候,就變成了生成器表達式

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 推導式comprehensions(又稱解析式),是Python的一種獨有特性。推導式是可以從一個數(shù)據(jù)序列構建另一...
    一雨成慕閱讀 567評論 0 0
  • 推導式,是Python的一種獨有特性。推導式是可以從一個數(shù)據(jù)序列構建另一個新的數(shù)據(jù)序列的結(jié)構體。 共有三種推導,在...
    Gambler_194b閱讀 432評論 0 0
  • 推導式comprehensions(又稱解析式),是Python的一種獨有特性。推導式是可以從一個數(shù)據(jù)序列構建另一...
    無敵的肉包閱讀 2,081評論 0 1
  • 每次看大牛的代碼很奇怪,比如T=[(x,y) for x in range(5) if x%2==0 for y ...
    05ea6e176933閱讀 770評論 0 0
  • 張正(心急如焚,一邊拍打著門一邊說):“羅森,你開門?。∧阕兂墒裁礃幼游叶疾慌?。你快讓我進去。” 毛儒毅(同樣心急...
    樹里閱讀 259評論 0 0

友情鏈接更多精彩內(nèi)容