python基礎二 03 推導式和深淺拷貝

2021-10-04 11:32:18 字數 2639 閱讀 9843

列表推導能非常簡潔的構造乙個新列表:只用一條簡潔的表示式即可對得到的元素進行轉換變形。

語法:[變數 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 是利用...