python 字典、列表、元組生成器的使用
阿新 • • 發佈:2018-07-07
需要 否則 二維 tor except 元組 python 字典 減少 返回
python的生成式在一些類型相互轉換的時候可以寫出十分優雅的代碼。如列表轉換成另一個列表、字典、或元組。並且代碼的執行效率也比使用for...in...循環高。
列表生成式
列表生成式即生成列表的生成式,寫法簡單而優雅,可以將多行代碼融合成一行。主要的作用是將其他對象轉換成列表或對原來的列表進行過濾。
# 列表轉換列表 ls = [1,2,4,6] ls1 = [x**2 for x in ls] print(ls1) 結果:[1,4,16,36] # 對列表過濾,返回true的才會保留到列表 ls = [1,2,4,6] ls1 = [x**2 for x in ls if x > 3]print(ls1) 結果:[16, 36] # 多條件過濾 ls = [1,2,4,6] ls1 = [x**2 if x > 2 else x**3 for x in ls] print(ls1) 結果:[1, 8, 16, 36] # 多重循環 ls = [1,2,4,6] ls1 = [x**y if x > 2 else x**3 for x in ls for y in ls] print(ls1) 結果:[1, 1, 1, 1, 8, 8, 8, 8, 4, 16, 256, 4096, 6, 36, 1296, 46656]
生成器生成式
- 在涉及到需要遍歷列表而不是針對列表的某個值操作時,使用生成器代替列表可以減少內存的消耗。
ls = [1,2,4,6] ls1 = (x**2 for x in ls) print(ls1) 結果:<generator object <genexpr> at 0x0000021B21DED150> # 通過for..in取數據不需要處理StopIteration for i in ls1: pass # next()方法需要處理StopIteration while True: try: print(next(ls1)) except StopIteration: pass
字典生成式
字典生成式在一些需要列表或元組轉化成字典的場合可以寫出很優雅的代碼。
# dict()可以接受類似列表生成式的寫法,前提是ls至少是二維可叠代對象,否則報錯 ls = [(‘name1‘,‘xiao‘),(‘name2‘,‘wang‘)] dict_ls = dict(x for x in ls) print(dict_ls) 結果:{‘name1‘: ‘xiao‘, ‘name2‘: ‘wang‘}
元組生成式
由於()這個類似列表生成式的形式被生成器占用了,所有元組生成式使用tuple()來進行。
ls = [(‘name1‘,[‘1‘,‘2‘]),(‘name2‘,‘wang‘)] dict_ls = tuple(x for x in ls) print(dict_ls) 結果:((‘name1‘, [‘1‘, ‘2‘]), (‘name2‘, ‘wang‘))
python 字典、列表、元組生成器的使用