1. 程式人生 > >Python系統學習第八課

Python系統學習第八課

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'>