Python系統學習第八課
阿新 • • 發佈:2019-01-04
def fun(n):
n[2] = 100
print(n)
return None
def fun2(n):
n = 11
print(n)
return None
a = [1,2,3,4,5,6]
print(a)
fun(a)
print(a)
b = 2
print(b)
fun2(b)
print(b)
#這裡有一個問題就是,上邊一個函式,把列表傳入之後,已經改變了原先列表的值,下邊的函式把值傳入之後並沒有改變函式的值。這個問題需要重視!!!
#這個可能是傳址和傳值的區別問題,就是說,可能是針對列表傳的是地址,針對數值傳的是數值
#對於複雜變數採用的是傳址操作
[1, 2, 3, 4, 5, 6]
[1, 2, 100, 4, 5, 6]
[1, 2, 100, 4, 5, 6]
2
11
2
#關於列表的函式
#使用append函式,在末尾加入
a =[ i for i in range(1,10)]
print(a)
a.append(0)
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
#使用insert函式,在指定位置插入
a =[ i for i in range(1,10)]
print(a)
a.insert( 2,666)
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 666, 3, 4, 5, 6, 7, 8, 9]
# 刪除
#del
#pop
print(a)
last = a.pop() #列表最後一個值彈出來
print(last)
print(a)
[1, 2, 666, 3, 4, 5, 6, 7, 8, 9]
9
[1, 2, 666, 3, 4, 5, 6, 7, 8]
#del函式刪除指定位置的值
print(a)
del(a[2])
print(a)
[1, 2, 666, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8]
#remove函式刪除指定值的元素,如果列表中沒有這個值那麼會報錯
print(a)
print(id(a))
a.remove(6)
print(a)
print(id(a))
#兩個id都一樣,說明他們是在同一個列表上進行的操作
[1, 2, 3, 4, 6, 7, 8]
2237185452552
[1, 2, 3, 4, 7, 8]
2237185452552
#clear 函式
#把函式內容全部清空了,但是列表依然存在,只是沒有數值元素
print(a)
print(id(a))
a.clear()
print(a)
print(id(a))
[]
2237185452552
[]
2237185452552
#reverse翻轉函式,翻轉並不會建立新列表,原地翻轉
a = [ i for i in range(1,10)]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2237185708808
[9, 8, 7, 6, 5, 4, 3, 2, 1]
2237185708808
#extend:擴充套件列表,兩個列表,把後一個直接拼接到前一個上
a = [1,2,3,4,5]
b = [11,22,33]
a.extend(b)
print(a)
c = a + b #兩種方法都可以
print(c)
[1, 2, 3, 4, 5, 11, 22, 33]
[1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33]
#count :查詢列表中指定值或者元素的個數
print(c)
num = c.count(11)
print(num)
[1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33]
2
#copy:拷貝,只是淺拷貝函式,只拷貝一層內容,深拷貝需要特定的工具。
a = [1,2,3,4,5]
print(a)
b = a
b[2] = 10
print(a) #傳地址操作
print(id(a))
print(b)
print(id(b))
b = a.copy() #這樣複製之後,就成了兩個列表,修改一個對另一個沒有影響。
print(a)
print(id(a))
print(b)
print(id(b))
[1, 2, 3, 4, 5]
[1, 2, 10, 4, 5]
2237185761864
[1, 2, 10, 4, 5]
2237185761864
[1, 2, 10, 4, 5]
2237185761864
[1, 2, 10, 4, 5]
2237185857096
#深拷貝和淺拷貝的區別
a = [1,2,3,[1,2,3,4]]
b = a.copy()
print(id(a))
print(id(b)) #兩個id不同,說明copy成為不同列表
print(id(a[3])) #但是兩個id是一樣的,說明這時候更改一個值,另外一個值也會跟著改變
print(id(b[3]))
a[3][2] = 666
print(a)
print(b) #這是一個雙層列表,copy的只是一層列表,還有一層列表沒有copy。
#以上說明,copy拷的只是列表a中的四個元素的地址,而第四個元素的地址卻指向了另外四個元素。所以,copy函式只是拷貝了一層。
2237185452872
2237185765000
2237185761352
2237185761352
[1, 2, 3, [1, 2, 666, 4]]
[1, 2, 3, [1, 2, 666, 4]]
#元組-tuple
- 元組可以看做是一個不可更改的list
- 有序列表
- 元組資料可以訪問,但是不可修改
- 元組資料型別可以是任意型別
- list的所有特性,除了可以不可修改,元組都具有,也就意味著,list具有的一些特性,比如索引,分片,序列相加,相乘,成員資格操作等都一樣
# 元組建立
t = ()
print(type(t))
t2 = (1)
print(type(t2))
t3 = (1,) # 必須要有一個逗號才可以成為一個元組,否則就成為了一個整型變數
print(type(t3))
t4 = (1,2,3,4,5)
print(type(t4))
t5 = 1,2,3,4,5 #不加括號也是可以的
print(type(t5))
#使用其他結構建立
a = [1,2,3,4]
b = tuple(a)
print(b)
print(type(b))
<class 'tuple'>
<class 'int'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
(1, 2, 3, 4)
<class 'tuple'>