Python入門學習筆記————08(list函式,元組)
阿新 • • 發佈:2018-12-29
#傳值與傳地址的區別
#對於簡單的數值,採用傳值的操作,即在函式內的操作不影響外面的變數
#對複雜的變數,採用傳遞地址的操作,此時進行的操作即是對函式本身的操作
def a(n):
n[2]=300
print(n)
return None
def b(n):
n += 100
print(n)
return None
an = [1,3,5,67,8]
bn = 9
print (an)
a(an)
print(an)
print(bn)
b(bn)
print(bn)
[1, 3, 5, 67, 8] [1, 3, 300, 67, 8] [1, 3, 300, 67, 8] 9 109 9
關於列表的函式
In [4]:
l = ['as','hello',23,45]
l
Out[4]:
['as', 'hello', 23, 45]
In [6]:
# append 插入內容,在末尾追加
a= [i for i in range(1,5)]
print (a)
a.append(100)
print(a)
[1, 2, 3, 4] [1, 2, 3, 4, 100]
In [8]:
#insert指定位置插入
#insert(index,data)
print(a)
a.insert(3,666)
print(a)
[1, 2, 3, 666, 4, 100] [1, 2, 3, 666, 666, 4, 100]
In [11]:
#刪除操作
#del 刪除
#把最後一為元素拿出來 pop
b=[1,435,6,6]
c = b.pop()
print(c)
print(b)
6 [1, 435, 6]
In [14]:
#remove:在列表中刪除指定的值的元素
a = [2,5,2,45,4,5]
print(id(a))
print(a)
a.remove(45)
print(a)
print(id(a))
#兩個id相同
140328058912520 [2, 5, 2, 45, 4, 5] [2, 5, 2, 4, 5] 140328058912520
In [17]:
#clear:清空列表
print(a)
print(id(a))
a.clear()
print(a)
print(id(a))
#如果想要晴空一個列表可以使用a = []或者a = list()
#但是原資料未被刪除
[] 140328058912520 [] 140328058912520
In [20]:
#reverse:資料原地fanzhuan
a = [1,2,3,4,5]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a))
[1, 2, 3, 4, 5] 140327999442824 [5, 4, 3, 2, 1] 140327999442824
In [22]:
#extend:擴充套件列表,,兩個列表,,把一個列表接在另一個後面
a = [1,2,3,4]
b = [5,6,7,8]
print(a)
print(id(a))
a.extend(b)
print(a)
print(id(a))
[1, 2, 3, 4] 140327990302152 [1, 2, 3, 4, 5, 6, 7, 8] 140327990302152
In [29]:
#count:查詢列表中指定值或元素的個數
a = [1,2,3,4,5,6,7,8]
print(a)
a.append(8)
print(a)
a.insert(3,8)
print(a)
a_8=a.count(8)
print(a_8)
[1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8, 8] [1, 2, 3, 8, 4, 5, 6, 7, 8, 8] 3
In [34]:
#copy :拷貝,淺拷貝
#列表賦值示例
#只是簡單地傳遞地址,並沒有產生新的資料
a = [1,2,3,4,5]
print(a)
b = a
print(b)
b[3]=777
print(a)
print(b)
print('#'*20)
#由此產生了copy函式
b = a.copy()
print(a)
print(id(a))
print(b)
print(id(b))
print('%'*20)
b[3] = 666
print(a)
print(b)
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 777, 5] [1, 2, 3, 777, 5] #################### [1, 2, 3, 777, 5] 140327999240520 [1, 2, 3, 777, 5] 140327999106568 %%%%%%%%%%%%%%%%%%%% [1, 2, 3, 777, 5] [1, 2, 3, 666, 5]
In [44]:
#深拷貝與淺拷貝的區別
#出現以下結果是應為copy是淺拷貝函式,只拷貝一層
#深層拷貝需要使用特定的工具
a = [1,2,3,[23,34,45]]
b = a.copy()
print(a)
print(b)
print(id(a))
print(id(b))
print('@'*20)
print(id(a[3]))
print(id(b[3]))
print('$'*20)
a[3][2]=333
print(a)
print(b)
[1, 2, 3, [23, 34, 45]] [1, 2, 3, [23, 34, 45]] 140327990302600 140327999317512 @@@@@@@@@@@@@@@@@@@@ 140327654263880 140327654263880 $$$$$$$$$$$$$$$$$$$$ [1, 2, 3, [23, 34, 333]] [1, 2, 3, [23, 34, 333]]
元組——tuple
- 元組可以看作是一個不可更改的list
元組建立
In [52]:
#建立空元組
t = ()
print(type(t))
#建立一個只有一個值的元組
t = (1,) #注意逗號
print(type(t))
# 也可這樣
t = 1,
print(type(t))
#沒有逗號
t = (1)
print(type(t))
#建立多值
t = (1,2,3,4)
print(type(t))
print(t)
#使用其他結構建立
l = [1,2,3,4,5]
t = tuple(l)
print(type(t))
print(t)
<class 'tuple'> <class 'tuple'> <class 'tuple'> <class 'int'> <class 'tuple'> (1, 2, 3, 4) <class 'tuple'> (1, 2, 3, 4, 5)
元組的特性
- 有序
- 元組資料可以訪問,不能修改
- 元組資料可以是任意型別
- 除了list的可修改外的特性,元組都具有
- 索引,分片,序列相加,相乘,成員資格操作等,與list一模一樣
In [53]:
#索引操作
t = (1,2,3,4)
print(t[2])
3
In [55]:
#超標
print(t[12])
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-55-f3c331a907e0> in <module>() 1 #超標 ----> 2 print(t[12]) IndexError: tuple index out of range
In [78]:
t = (1,2,3,4,5,6)
t1 = t[1:4]
print(id(t))
print(id(t1))
print(t1)
#切片可以超標
t2 = t[1:100]
print(t2)
140328169459432 140327990359816 (2, 3, 4) (2, 3, 4, 5, 6)
In [81]:
#序列相加
t1 = (1,2,3)
t2 = (4,3,5)
#傳址操作
print(t1)
print(id(t1))
t1 = t1 + t2
print(t1)
print(id(t1))
#tuple的不可修改指的是內容的不可修改
t1[1]= 100
(1, 2, 3) 140327990359816 (1, 2, 3, 4, 3, 5) 140327999448744
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-81-80cb26bf82fa> in <module>() 10 11 #tuple的不可修改指的是內容的不可修改 ---> 12 t1[1]= 100 TypeError: 'tuple' object does not support item assignment
In [82]:
#元組相乘
t = (1,2,3)
t = t*3
print(t)
(1, 2, 3, 1, 2, 3, 1, 2, 3)
In [83]:
#成員檢測
t = (1,2,3)
if 2 in t:
print('YES')
else:
print('NO')
YES
In [85]:
#元組遍歷,一般採用for
#單層遍歷
t = (1,2,3,'hello','good','boy')
for i in t:
print(i,end=' ')
1 2 3 hello good boy
In [88]:
#雙層遍歷
t = ((1,2,3),('i','love','hello'),(22,3,4))
for i in t:
print(i)
for m,n,k in t:
print(m,'--',n,'--',k)
(1, 2, 3) ('i', 'love', 'hello') (22, 3, 4) 1 -- 2 -- 3 i -- love -- hello 22 -- 3 -- 4