python列表生成式和生成器

小杰哥001發表於2018-08-16

1.列表生成式

概念:列表生成式是快速生成列表的一個公式

1.1.生成 1-100的列表

普通實現:

listData = [i for i in range(1,101)]
print(listData)
複製程式碼

結果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

列表生成式實現:

listData = [i for i in range(1,101)]
listData

複製程式碼

結果:同上

1.2取出所有帶a的

list1 = ['asd','sdf','freg','sfag','refv','aser','sdfr','dfgi']
#取出所有帶a的
#普通寫法
rs_list = []
for s in list1:
    if 'a' in s:
        rs_list.append(s)
print(rs_list)
#列表生成式
list2 = [x for x in list1 if 'a' in x]
print(list2)

複製程式碼

1.3 雙重for迴圈

普通寫法:

list = []
for x in range(0,10)
  for y in range(10,20)
    s = x * y
    list.append(s)
list
複製程式碼

列表生成式寫法:


list = [x*y for x in range(0,10)for y in range(10,20]
list

複製程式碼

2.字典生成式


#for迴圈遍歷列表,將列表中小元組key和value取出,作為字典中的key:value
list4 = [('name','zhangsan'),('age',22),('phone',110)]
list = {key:value for key,value in list4}
list
複製程式碼

3.列表生成器和列表生成式的區別

列表生成式:會將所有的結果全部計算出來,把結果存放到記憶體中,如果列表中資料比較多,會佔用過多的記憶體空間,可能導致MemoryError記憶體錯誤或者導致程式在執行時出現卡頓的情況;將列表生成式的 [] 改成 ()就是一個生成器

列表生成器:會建立一個列表生成器物件,不會一次性的把所有結果都計算出來,如果需要序號獲取資料,可以使用next()函式來獲取,但要注意,一旦next()函式獲取不到資料,會導致出現StopIteration異常錯誤,可以使用 for迴圈遍歷生成器物件,獲取所有資料 視情況而定,如果資料量比較大,推薦使用生成器;python2.7中就是 range(生成式) 和xrange(生成器) 的區別

程式碼:

generator = (i for i in range(10))
print(next(generator))
print(next(generator))
# for x in generator:
#     print(x)
複製程式碼

結果:0 1

#2 3 4 5 6 7 8 9

4.generator生成器的第二種表現形式 --- 生成器函

生成器函式用next呼叫

def fun():
    for i in  range(1,100):
        print("模擬一個耗時操作")
        yield

next(fun())
複製程式碼

相關文章