一、列表解析
根據已有列表,高效創建新列表的方式。
列表解析是Python迭代機制的一種應用,它常用於實現創建新的列表,因此用在[]中。
二、語法:
[expression for iter_val in iterable]
[expression for iter_val in iterable if cond_expr]
三、例子
3.1 例子1
要求:列出1~10所有數字的平方
1、普通方法:
L = [ ]
for i in range(1,11):
L.append(i**2)
print (L)
結果: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2、列表解析
L = [ i**2 for i in range(1,11)]
print (L)
結果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3.2、例子2
要求:列出1~10中大於等於4的數字的平方
1、普通方法:
L = [ ]
for i in range(1,11):
if i >= 4:
L.append(i**2)
print (L)
結果:[16, 25, 36, 49, 64, 81, 100]
2、列表解析
L = [ i**2 for i in range(1,11) if i >= 4 ]
print (L)
結果:[16, 25, 36, 49, 64, 81, 100]
3.3、例子3
要求:列出1~10所有數字的平方除以2的值
1、普通方法
L = [ ]
for i in range(1,11):
L.append(i**2/2)
print (L)
結果:[0, 2, 4, 8, 12, 18, 24, 32, 40, 50]
2、列表解析
L = [i**2/2 for i in range(1,11) ]
print (L)
結果:[0, 2, 4, 8, 12, 18, 24, 32, 40, 50]
3.4、例子4
要求:實現兩個列表中的元素逐一配對。
1、普通方法:
L1 = ['x','y','z']
L2 = [1,2,3]
L3 = [ ]
for a in L1:
for b in L2:
L3.append((a,b))
print (L)
結果:[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
2、列表解析:
L1 = ['x','y','z']L2 = [1,2,3]
L3 = [ (a,b) for a in L1 for b in L2 ]
print (L)
結果:[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
3.5、例子5
數據庫bookinfo對應model類BookInfo:
def main():
result = BookInfo.objects.all()
print(type(result )) # <class 'django.db.models.query.QuerySet'>
ids = [list_list(item) for item in result ]
print(ids) # [[1, 'python'], [2, 'java']]
print(type(ids)) # <class 'list'>
def list_list(item):
return [item.id, item.btitle]
if __name__ == '__main__':
main()
說明:QuerySet可以遍歷,列表解析的結果是一個列表[],[]內部每遍歷一遍可以加入一個列表,即列表嵌套[[],[],[]]