推導式
通過一行回圈判斷遍歷出一些列資料的方法叫做推導式
語法:
val for val in iterable
1.推導式基本語法
lst = [] for i in range(1,51): lst.append(i) print(lst)
改寫推導式
lst = [ i for i in range(1,51) ] print(lst)
小練習
# 1.[1,2,3,4,5] => [2,4,6,8,10] lst = [ i*2 for i in range(1,6) ] print(lst)
2.帶有判斷條件的推導式
注意點:for后面緊跟的判斷條件只能是單項分支.
[1,2,3,4,5,6,7,8,9,10] => [1,3,5,7,9 ... ]
lst = [1,2,3,4,5,6,7,8,9,10] lst_new = [] for i in lst: if i % 2 == 1: lst_new.append(i) print(lst_new)
改寫推導式
lst = [ i for i in lst if i % 2 == 1 ] print(lst)
3.多回圈推導式 # 誰????誰
lst1 = ["孫杰龍","陳露","曹靜怡"] lst2 = ["王志國","鄧鵬","合理"] lst_new = [] for i in lst1: for j in lst2: lst_new.append(i+"????"+j) print(lst_new)
改寫推導式
lst = [ i+"????"+j for i in lst1 for j in lst2 ] print(lst
4.帶有判斷條件的多回圈推導式
lst_new = [] for i in lst1: for j in lst2: if lst1.index(i) == lst2.index(j): lst_new.append(i+"????"+j) print(lst_new)
改寫推導式
lst = [i+"????"+j for i in lst1 for j in lst2 if lst1.index(i) == lst2.index(j)] print(lst)
集合推導式
案例:
滿足年齡在18到21,存款大于等于5000 小于等于5500的人,
開卡格式為:尊貴VIP卡老x(姓氏),否則開卡格式為:摳腳大漢卡老x(姓氏)
把開卡的種類統計出來
lst = [ {"name":"趙沈陽","age":18,"money":3000}, {"name":"趙萬里","age":19,"money":5200}, {"name":"趙蜂擁","age":20,"money":100000}, {"name":"趙世超","age":21,"money":1000}, {"name":"王志國","age":18,"money":5500}, {"name":"王永飛","age":99,"money":5500} ] setvar = set() for i in lst: print(i) # {'name': '趙沈陽', 'age': 18, 'money': 3000} if 18 <= i["age"] <= 21 and 5000 <= i["money"] <= 5500: res = "尊貴VIP卡老{}".format(i["name"][0]) else: res = "摳腳大漢卡老{}".format(i["name"][0]) # 添加到集合中 setvar.add(res) print(setvar)
{ 三元運算子 + 推導式 }
setvar = { "尊貴VIP卡老{}".format(i["name"][0]) if 18 <= i["age"] <= 21 and 5000 <= i["money"] <= 5500 else "摳腳大漢卡老{}".format(i["name"][0]) for i in lst }
print(setvar)
字典推導式
一.enumerate
enumerate(iterable,[start=0])
功能:列舉 ; 將索引號和iterable中的值,一個一個拿出來配對組成元組,通過迭代器回傳
引數:
iterable: 可迭代性資料 (常用:迭代器,容器型別資料,可迭代物件range)
start: 可以選擇開始的索引號(默認從0開始索引)
回傳值:迭代器
基本語法
from collections import Iterator,Iterable lst =["王文","呂洞賓","何仙姑","鐵拐李","張國老","曹國舅","藍采和","韓湘子"] it = enumerate(lst) it = enumerate(lst,start=100) print(isinstance(it,Iterator))
next
print( next(it) )
for + next (推薦,資料較大時使用)
for i in range(3): print(next(it))
for
for i in it: print(i)
list 強轉迭代器
print(list(it))
(1) 字典推導式 配合 enumerate 來實作
dic = {k:v for k,v in enumerate(lst,start=100)}
print(dic)
"""
(100, '王文')
(101, '呂洞賓')
(102, '何仙姑')
(103, '鐵拐李')
(104, '張國老')
(105, '曹國舅')
(106, '藍采和')
(107, '韓湘子')
"""
(2) 使用dict強轉迭代器,瞬間得到字典
dic = dict( enumerate(lst,start=100) ) print(dic)
二.zip
特點:按照索引配對
zip(iterable, ... ...)
功能: 將多個iterable中的值,一個一個拿出來配對組成元組,通過迭代器回傳
iterable: 可迭代性資料 (常用:迭代器,容器型別資料,可迭代物件range)
回傳: 迭代器
基本語法
# lst1 = ["孫開啟","王永飛","于朝志"] # lst2 = ["薛宇健","韓瑞曉","上朝氣"] # lst3 = ["劉文博","歷史園","張光旭"] # 在索引下標同時存在時,才會進行配對,否則舍棄. lst1 = ["孫開啟","王永飛","于朝志"] lst2 = ["薛宇健","韓瑞曉"] lst3 = ["劉文博"] it = zip(lst1,lst2,lst3) print(list(it))
(1) 字典推導式 配合 zip 來實作
lst_key = ["ww","axd","yyt"] lst_val = ["王維","安曉東","楊元濤"] # ('ww', '王維'), ('axd', '安曉東'), ('yyt', '楊元濤') dic = {k:v for k,v in zip(lst_key , lst_val) } print(dic)
(2) 使用dict強轉迭代器,瞬間得到字典
dic = dict( zip(lst_key , lst_val) ) print(dic)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431008.html
標籤:其他
