python 列表總結二

2021-08-28 03:24:38 字數 2596 閱讀 4063

python中 list 修改 再次反思 .

最近讀書的時候,一些感悟,記錄一下. 之前有寫過有關列表中修改值的注意事項, 暫且把這個叫做 python 列表總結二

可以參考一下這個:

python修改列表問題總結

1 來看乙個例子

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

l = list(range(10))

for num in l:

num *= 2

print(l)

result:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

這裡列表元素沒有發生改變.

2 來看下乙個例子

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""@author: frank

@contact: [email protected]

@file: 33.py

@time: 2018/9/14 下午7:41

"""if __name__ == '__main__':

l = [['a'], ['b'], ['c'], ['d']]

for number in l:

number*=2

print(l)

result:

[['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']]

可以看出列表元素的值發生了改變.

同樣的** 為啥乙個 元素值發生了改變,而乙個沒有呢?

參考 流暢的python 8.4 節

python 裡面 是 函式引數作為引用的時候,

python 支援的 引數傳遞模式 是 共享傳引數 ,

共享傳引數的各個形式引數 獲得實參中各個 引用的副本. 也就是說 , 函式內部 的形參是實參的別名.

這種的結果是什麼呢?

函式可能 修改 作為引數的可變的物件 ,卻沒有辦法修改那些物件上的標識. (即不能把乙個物件 替換成另外乙個物件)

簡單來說,如果是可變物件可以直接修改物件的值 ,如果是不可變物件是沒有辦法直接在原來的物件進行 修改的.

下面的例子可以說明這一點..

在解釋其環境裡面實驗一下

person_tuple  = tuple(['name','frank'])

hobby_tuple =tuple(['swimming'])

person_tuple = tuple(['name','frank'])

hobby_tuple =tuple(['swimming'])

person_tuple

('name', 'frank')

hobby_tuple

('swimming',)

id(person_tuple),id(hobby_tuple)

(4458632456, 4458598864)

person_tuple+hobby_tuple

('name', 'frank', 'swimming')

person_tuple

('name', 'frank')

person_tuple+=hobby_tuple

person_tuple

('name', 'frank', 'swimming')

id(person_tuple)

4458568872

python 中 元祖是不可變物件, 所以 在進行 += 的時候,python 並沒有報錯,而是直接申請另乙個空間來重新存 修改後的值.

可以看出 4458632456 ,和 4458568872 是不一樣的. 所以python 解釋其會計算值,之後賦給這個 person_tuple 物件,原來的person_tuple 會被釋放掉了.

這就是元祖的不可變性,就是沒有辦法在原來的tuple 新增元素.

3 在看乙個流暢的python書中的乙個例子

在直譯器環境下面:

def

add(x,y):

x += y

return x

x ,y =10,20

add(x,y)30x

10y20x=[1,2]

y=['frank','chang']

add(x,y)

[1, 2, 'frank', 'chang']

x[1, 2, 'frank', 'chang']

同樣是 x,y 但是如果 x,y 是不可變型別, x+=y 並不會改變 x 的值.

如果 x,y 是可變型別, x+=y就會 修改x 的值.

4 總結

對於用for 迭代 可迭代物件的時候,列表中是否可以修改元素取決於,列表的元素是不是可變的物件, 如果是就可以修改.

分享快樂,留住感動.2018-09-14 23:01:55 –frank

python列表總結

1 表示方式 中括號 list轉化,例如a list abcdef 2 列表重新賦值 a 1 b 或者a 1 1,2,3 或者a 4 2 1,2 3 判斷元素是否在列表中 1 in a 元素1在列表a中,將會返回布林值 4 合併 a b或a.extend b 5 列表中元素的個數 a.count 1...

python 列表 總結

在python裡建立列表和字典非常簡單,這裡總結一下它們的常用方法 1.建立列表 myarry one two three 訪問列表中資料的方法有很多種 可以用len x 方法檢視列表的長度 len myarry 會輸出 3 對列表進行增刪改操作 aaa 也可以使用extend iter 方法在末尾...

Python列表總結(1)

定義和操作列表 list 定義列表 list.insert loc,value loc是列表中的索引 從0開始 value為插入的值 list.pop 刪除並返回最後乙個元素 del list loc 刪除list中loc號元素,在知道索引的前提下可刪除任何位置的元素 list.remove val...