列表生成式:會將所有的結果全部計算出來,把結果存放到記憶體中,如果列表中資料比較多,就會占用過多的記憶體空間,可能會導致memoryerror記憶體錯誤或者導致程式在執行時出現卡頓的情況
列表生成器:會建立乙個列表生成器物件,不會一次性的把所有結果都計算出來,如果需要獲取資料,可以使用next()函式來獲取,但是需要注意,一旦next()函式獲取不到資料,會導致出現stopiteration異常錯誤,可以使用for迴圈遍歷列表生成器,獲取所有資料
需要視情況而定,如果資料量比較大,推薦使用生成器
python2.7中就是range(生成式) 和 xrange(生成器)的區別
列表生成式是快速生成乙個列表的一些公式
在列表中存放0~100的數:
普通的列表生成:
numbers=
for x in range(0,101):
print(numbers)
用列表生成式生成列表:[要放入列表的資料 簡單的表示式1 表示式2]
#x for x in range(0,101) for迴圈遍歷出來的值,放入列表中
numbers=[x for x in range(0,101)]
print(numbers)
列表中存放0~100的偶數:
普通方法生成列表:
for x in range(0,101):
if x%2==0:
print(numbers)
用列表生成式生成列表:
#for迴圈遍歷0~101的數字,如果數字對2取餘==0,表示是偶數,x放在列表中
numbers=[x for x in range(0,101)if x%2==0]
print(numbers)
找出列表list1=['asd','adf','dafg','acbo']帶有a的字元
普通寫法:
rs_list=
for s in list1:
if 'a' in s:
print(rs_list)
列表生成式:
list2=[x for x in list1 if 'a' in x]
列表生成式支援雙層for迴圈
list3=[x*y for x in range(0,10) for y in range(20)]
print(list3)
列表生成式和列表生成器的區別
列表生成式:
#列表生成式 直接把10000個數字建立好,放在列表中
list5=[x for x in range(10000)]
print(list5)
列表生成器:
#generator 列表生成器,生成乙個物件,不會把資料直接建立出來,當for迴圈遍歷的時候,生成器物件會呼叫next()函式,獲取下乙個要生成的資料
list6=(x for x in range(10))
print(list6)
#生成器物件可以呼叫next()函式獲取下乙個要生成的數字,如果next()函式沒有獲取到下乙個資料,會丟擲異常 stopiteration,程式出錯
#生成器物件可以使用for迴圈遍歷,實現next()函式的功能,不停地獲取下乙個資料,如果沒有下乙個資料迴圈結束
#next()在python2中執行generator.next(),在python3中是私有函式執行generator.__next__()
# print(list6.__next__())
# print(list6.__next__())
# print(list6.__next__())
# print(list6.__next__())
for x in list6:
print(x)
在pytnon2中執行以下**:
a=list(xrange(3))
b=range(3)
print(a)
print(b)
執行結果
[0, 1, 2]
[0, 1, 2]
說明xrange執行出是乙個物件,需用list轉換為列表;range執行出直接是乙個列表 個人筆記 Python 列表與列表生成式
在python語言中,所謂的列表生成式,就是說可以生成list列表的表示式,是python內建的一種強大的功能。1.1 python 列表 list python裡面 表示乙個列表 列表是最常用的python資料型別 建立乙個列表,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示 list...
Python 列表生成式
列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用list range 1,11 list range 1,11 1,2,3,4,5,6,7,8,9,10 但...
python列表生成式
全都是重點!列表生成式即listcomprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用range 1,11 range 1,11 1,2,3,4,5,6,7,8,9,10 但如果要生成...