python學習筆記day4:列表和元祖及其操作

列表操作 :[ ]
1.1列表增加:
append:整體插入
extend:迭代插入(只迭代一級)

li = ['Jerry','Tony','女神','Alex']
li.append('陽關')  # 整體插入
li.extend('夜晚')  # 迭代插入

1.2添加示例:

bl=[]
while 1 :
    add = input('請輸入要添加的值(q退出):')
    if add == 'q':
        break
    else:
        bl.append(add)

2.按索引插入,必須兩個參數缺一不可:insert(位置,內容)

li.insert(4, '辛巳')

3.按索引刪除,當參數爲空時默認刪除最後一個:pop(0

li.pop(4)
# li.pop() # 默認刪最後一個

4.清空:claer

li.clear()

5.切片刪除:del li[ : ]
直接刪除整個列表:del li

del li[5:]

6.修改, 切片修改先把值取出,然後在按迭代(只迭代一級)插入要修改值

li[4] = '男神'
li[0:2] = '生日快樂'
li[0:2] = {1,2,3,'生日快樂','天方夜譚'}

7.查詢

for i in li:
print(li[0:2])

8.公共方法
8.1列表長度:len()

l = len(li)

8.2計算列表中的元素個數

l1 = li.count('女神')

8.3列表的查詢只有index,查找不到報錯

print(li.index('女神'))

8.4排序功能:sort()

li = [1, 5, 3, 7, 6, 9, 2]
# 正序
li.sort()
# 倒敘
li.sort(reverse=True)

8.5反轉:reverse()

li.reverse()

9.元祖的操作 : ( ) tuple
元祖中若只有一個元素如果後面沒有逗號,那這個元素是什麼數據類型,就是什麼類型,有逗號的情況纔是元素數據類型
元祖爲只讀列表,允許查詢和切片
兒子不能改,孫子可能可以改

tu = (1, 2, 3, 'alex', [1, 2, 3], 'running')
print(tu[0:4])
tu[4][0] = 5
print(tu)
for i in tu:
    print(i)

10.連接與拆分 join的迭代拼接中要求被拼接對象只能是字符串,不能包括數字以及其他列表,也只迭代一級
連接:列表轉化爲字符串 連接符.join(列表)
拆分:字符串轉化爲列表 字符串.split(以某字符作爲拆分)

s = ['shut up', 'hurry', 'abc', '笑笑']
s1 = '_'.join(s)
print(s1)

11.1range 顧頭不顧尾的數字範圍,第三個參數是步長

for i in range(0,10,2):
    print(i)
for n in range(10, 0, -1):
    print(n)
# 如果開始與結束的方向 與步長的方向相反,那麼也不會報錯直接不執行無結果
for n in range(0, 10, -1):
    print(n)
# 如果只包括一個一個數值,那麼就相當於一整個數組的[0:10]
for n in range(10):
   print(n)

11.2示例

# 輸出列表中的全部元素,包括列表中的深層列表全部分開打印出來
b = [1, 2, 3, 4, 5, [1, 2, 3, 'sunday'], '笑容的代表', '美麗人生']
for i in range(len(b)):
    if type(b[i]) == list:
        for j in b[i]:
            print(j)
    else:
        print(b[i])

12.列表中列表名相當於是一個指向內存地址的指針 = 會將地址賦值,與單個字符不同單個字符的賦值只是相當於簡單的賦值運算

a = []
b = a
c = a
a.append('a')
print(a, b, c)    # 結果a,a,a

z = 0
x = z
v = z
z = 1
print(z, x, v)    # 結果1 0 0

13.深淺copy
13.1copy的一級賦值
copy賦值操作完成,相當於重新定義了一個列表將值賦給此列表,copy只會將數值賦值,當修改l2時其數值不會影響l1

l1 = [1, 2, 3]
l2 = l1.copy()
print(l1, l2)
print(id(l1), id(l2))
l2.append('a')
print(l1, l2)

13.2copy的多級賦值
copy的第一級雖然是直接賦值,但是內部的多級列表儲存的是地址,因此改變一個的值也會相應改變其他的copy列表的值

l1 = [1, 2, [4, 5, 6], 3]
l2 = l1.copy()

print(l1, id(l1))
print(l2, id(l2))
l1.append('a')
print(l1, l2)
l1[2].append('a')
print(l1, l2)
print(id(l1[2]))
print(id(l2[2]))

13.3 deepcopy
deepcopy會將內部的多級列表也變成普通的數值賦值,改變一個不會影響deepcopy的數值,目前測試過的第二級的列表值已經不會隨着被copy元素的改變而改變了

import copy
l1 = [1, 2, 3, [4, 5, 6], 7]
l2 = copy.deepcopy(l1)
print(l1, id(l1))
print(l2, id(l2))
l1.append('a')
print(l1, l2)
l1[3].append('a')
print(l1, l2)

13.4切片賦值
切片賦值就相當於是簡單的copy,多級(可迭代對象)也存儲爲地址類型

l1 = [1, [1], 2, 3, 4]
l2 = l1[:]
l1[1].append('a')
print(l1, id(l1))
print(l2, id(l2))
print(l1[1] is l2[1])

14 enumerate:目前看來可以選擇列表循環的開始值,循環還是按照整個列表循環的,只是初始數值不再是0,而變成自己賦的值

li = ['alex', 'taibai', 'wusir', 'egon']
for i in li:
    print(li.index(i),i)

for j,i in enumerate(li,1):
    print(j,i)

15.列表總結
在這裏插入圖片描述
16.元祖以及copy小結
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章