列表推導能非常簡潔的構造乙個新列表:只用一條簡潔的表示式即可對得到的元素進行轉換變形。
語法:[變數 for 變數 in 可迭代物件]
1.為什麼要使用推導式?
現在我們要生成乙個列表,列表當中的元素為0-10,首先我們不用列表推導式,該如何來實現?
list1 =
for i in
range(10
):print
(list1)
那如何用列表推導式呢?# 很明顯,使用推導式**簡潔很多
list2 =
[i for i in
range(10
)]print
(list2)
2.在列表推導式中使用流程控制
求出0-20間所有的偶數
list3 =
[i for i in
range(20
)if i %2==
0]print
(list3)
列印出從(0,0)到(9,9)的所有座標list4 =
[(i,j)
for i in
range(10
)for j in
range(10
)]print
(list4)
# 類似的還有:
# a = [(i,j) for i in range(1,5) for j in range(6,10)]
# print(a)
# 可以看到兩層迴圈的列表推導式可讀性就有點差了,所以多次巢狀不建議列表推導式
比如現在有一列表l = [[1,2,3],[4,5,6],[7,8,9]]。要求出1/4/7 和 1/5/9 元素,思考如何取出?
l =[[
1,2,
3],[
4,5,
6],[
7,8,
9]]# 取到 147
result1 =
[i[0
]for i in l]
print
(result1)
# 取到 159
# len(l)獲取長度為3,第一次i = 0,l[i][0]取值下標為0 中的第乙個元素
result2 =
[l[i]
[i]for i in
range
(len
(l))
]print
(result2)
字典和集合推導式是以上思想的延續,語法差不多,只不過產生的是集合和字典而已。dic1 =
print
(dic1)
set1 =
print
(set1)
元組沒有推導式,只有生成式,但是生成的是惰性序列,只有通過list()才能看tup1 =
(i for i in
range(5
))print
(tup1)
# 惰性序列
print
(list
(tup1)
)
1.深拷貝:
拷貝所有物件,包括頂級物件以及巢狀物件,所以原始物件的改變不會造成深拷貝裡任何子元素的改變
2.淺拷貝:
只拷貝頂級物件, 沒有拷貝巢狀物件,所以原始資料改變,巢狀物件會改變!
3.應用場景
比如在cmdb系統中,我們定義了乙個報警模版call給所有的伺服器使用,
此時有一批特殊應用的伺服器需要不通的報警引數,
我們既不想單獨新建模版來乙個乙個新增報警引數,又不想修改預設模版而影響其他機器的報警閾值。
此時我們就需要用深拷貝來完成。
我們在維護伺服器資訊的時候,經常會要更新伺服器資訊,這時我們重新乙個乙個新增是比較麻煩的,
我們可以把原資料型別拷貝乙份,在它的基礎上做修改。
4.簡單的例子import copy
a =[1,
2,3,
4,[5
,6,7
,9,10
]]b = a
print
('a的di:%s,b的id:%s'%(
想深入了解原理的話推薦這篇文章,寫的很詳細:python深淺拷貝
python基礎 推導式和模組
推導式包括 列表推導式,字典推導式,集合推導式 列表推導式是利用其他列表建立新列表的一種方式,工作原理類似for迴圈,即可對得到的元素進行轉換和篩選。列表推導式基本格式 變數名 表示式 for 變數 in 列表 或者變數名 表示式 for 變數 in 列表 if 條件 例子 list1 1,2,3,...
Python基礎 推導式
什麼是推導式?推導式,就是設定了一定條件的乙個python表示式,可以根據表示式自動推導生成對應的python物件。通常情況下根據生成物件的不同,推導式區分為 列表推導式 是利用其它列表建立新列表的一種方式,工作原理類似for迴圈,即可對得到的元素進行轉換或者篩選。列表推導式的基本格式 變數名 表示...
python基礎 推導式
定義 推導式comprehensions 又稱解析式 是python的一種獨有特性。推導式是可以從乙個資料序列構建另乙個新的資料序列。推導式包括 1.列表 list 推導式 2.字典 dict 推導式 3.集合 set 推導式 1.列表推導式 列表推導式 list comprehension 是利用...