4 三元表达式 列表解析 生成器表达式
生活随笔
收集整理的這篇文章主要介紹了
4 三元表达式 列表解析 生成器表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
三元表達式
#!/usr/bin/env python3 # _*_ coding:utf-8 _*_ # @File : 三元表達式 # @Version : 1.0'''三元表達式能實現簡單的 if else 語句 so....有那三元呢:自己理解1. 左邊成立執行的代碼 2. if 判斷條件 3. esle 不成立所執行的代碼-- 最后的結果用變量接收 '''# 簡單的 if else 語句: num = 7if num > 10:print('大于10的數字') else:print('小于10的數字')# -------------------------def max2(x,y):if x > y:return xelse:return yprint(max2(3,7))# 三元表達式:將簡單的 if els 寫在一行,賦值給一個變量接受 ret = '大于10的數字' if num > 10 else '小于10的數字' print(ret)# ---------------------------------------------def max2(x,y):return x if x > y else yprint(max2(3,7))# --------------------------------------------- days = 45result = '必掀起大浪' if days >= 45 else 'select' print(result)
?
列表解析 生成器表達式
#!/usr/bin/env python3 # _*_ coding:utf-8 _*_ # @File : 列表解析 # @Version : 1.0from collections import Iterator''' 將迭代數據,利用列表解析,生成新的列表。但數量大的時不可用列表解析,會引爆內存。'''# 取得列表元素的平方 l = [11,22,33,44,55,66,77,88,99] new_l = []# 1 正常解析for k in l:new_l.append(k**2)print(new_l) # [121, 484, 1089, 1936, 3025, 4356, 5929, 7744, 9801]# -----------------------------------------------------------------------------------------# 2 列表解析 ret = [ k**2 for k in l ]print(ret) # [121, 484, 1089, 1936, 3025, 4356, 5929, 7744, 9801] 效果一樣# 3 列表解析時也可加入條件'''[ 列表解析肯定要用list包起來 表達式之間空格即可 不需要寫特殊分隔符 結果肯定也是個list ]列表解析的好處縮減代碼兩 ''' # [ 列表最左邊對解析出的每一個元素處理 中間是解析語句 最右邊是過濾條件 ] ret = [ k**2 for k in l if k > 44 ]print(ret) # [3025, 4356, 5929, 7744, 9801]# 再弄個例子 l2 = ['tony','seven','eggtea']new_l2 = [ k.capitalize() for k in l2 ]print(new_l2) # ['Tony', 'Seven', 'Eggtea']# -----------------------------------------------------------------------------------------# 將 [] 換成() 會是啥玩意呢 --- 生成器表達式 new_l2_ = ( k.capitalize() for k in l2 )print(new_l2_) # <generator object <genexpr> at 0x7f194c8982b0> 是個生成器print(type(new_l2_)) # <class 'generator'> 是個生成器print(isinstance(new_l2_,Iterator)) # True 迭代器 __iter__ ,__next__ print(next(new_l2_)) # Tony print(next(new_l2_)) # Seven print(next(new_l2_)) # Eggtea# so ... list_old = [1,2,3,4,5,6,7,8,9]new_list = ( k**2 for k in list_old if k > 4 ) # [] 換成了() 結果是 generatorprint(new_list) # <generator object <genexpr> at 0x7f2d59946410>for i in new_list:print(i)'''so ... 將列表解析的 [] 換成 () 結果是一個生成器(迭代器)不確定生成器里元素的數量時不要用next 取值 用 獨有特性的 for 循環 取值 '''# 列表解析 [] 換成 () 后 結果是個生成器, 就成了生成器表達式,這樣解析數量大的時就不會爆內存了 # 弄個例子# ret = [ 'egg%s' %k for k in range(100000000)] 這種情況內存吃不了 g = ('egg%s' %k for k in range(10000000000000000)) # 數據在大也無妨,next 只有一個值在內存中print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) # 可以無限next g1 = ('egg%s' %k for k in range(10000000000000000) if k == 9) # 后面加上過濾條件print(next(g1)) # 生成器里就一個過濾成功的一個值,只能next一次 #print(next(g1)) # StopIteration Error # ------------------------------------------------------------------------------------------# 生成器表達式應用場景于讀取大文件比較好 with open('test.c',encoding='utf-8') as f_read:g=( line.strip() for line in f_read ) # 去掉換行符,整個文本搞成生成器print(next(g))print(next(g))for k in g:print(k)print(100*'{0}'.format('-'))'''這里循環生成器不行,此時文件已關閉,生成器不存在了for i in g:print(i) # ValueError: I/O operation on closed file'''# 在弄個例子 --如:數據庫中的數據 ''' apple 10 3 tesla 100000 1 mac 3000 2 lenovo 30000 3 chicken 10 3 '''# 計數總消費 with open('db.txt',encoding='utf-8') as f:'''ret = [ float(line.split()[1]) * int(line.split()[2]) for line in f]print(ret) # [30.0, 100000.0, 6000.0, 90000.0, 30.0]print(sum(ret)) # 196060.0'''cont = sum(float(line.split()[1]) * int(line.split()[2]) for line in f)print(cont) # 196060.0# 格式化輸出數據 [{'name':xxx,},{'price':xxxx},{'price':xxx}] with open('db.txt',encoding='utf-8') as f_read:goods_info = [ {'name':line.split()[0],'price':line.split()[1],'count':line.split()[2]} for line in f_read ]print(goods_info) # [{'count': '3', 'name': 'apple', 'price': '10'},# {'count': '1', 'name': 'tesla', 'price': '100000'},# {'count': '2', 'name': 'mac', 'price': '3000'},# {'count': '3', 'name': 'lenovo', 'price': '30000'},# {'count': '3', 'name': 'chicken', 'price': '10'}]
?
轉載于:https://www.cnblogs.com/liushubao/p/7700729.html
總結
以上是生活随笔為你收集整理的4 三元表达式 列表解析 生成器表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 送灵澈上人的作者是谁啊?
- 下一篇: git服务器搭建问题