1. 程式人生 > 其它 >python---列表和元組

python---列表和元組

技術標籤:筆記列表python元組

一.列表

1. 列表的建立

li = []
print(li, type(li))
li1 = [1]
print(li1, type(li1))

在這裡插入圖片描述

2. 列表的基本特性

1)連線操作符和重複操作符

print([1, 2] + [2, 3])
print([1, 2] * 3)

在這裡插入圖片描述

2)成員操作符(in, not in)

print(1 in [1, 2, 3])
print(1 in ["a", False, [1, 2]])

注意:這裡False也代表0,True代表1
布林型別:
True: 1
False:0

在這裡插入圖片描述

3)索引

li = [1, 2, 3, [1, 'b', 3]]
print(li[0])  # 1
print(li[-1]) # [1, 'b', 3]
print(li[-1][0])  # 1
print(li[3][-1])  # 3

在這裡插入圖片描述

4)切片

li = ['172', '25', '254', '100']
print(li[:2])
print(li[1:])
print(li[::-1])

在這裡插入圖片描述
需求: 已知[‘172’, ‘25’, ‘254’, ‘100’], 輸出: “100-254-25”

li = ['172', '25', '254', '100']
print("-".
join(li[1:][::-1]))

在這裡插入圖片描述

5)for迴圈

names = ["粉絲", '粉條', '粉帶']
for name in names:
    print(f"西部開源貓大佬的姓名是:{name}")

在這裡插入圖片描述

3. 列表的常用方法

1)增加

1-1)追加
li = [1, 2, 3]
li.append(4)
print(li)

在這裡插入圖片描述

1-2)在列表開頭新增
li = [1, 2, 3]
li.insert(0, 'cat')
print(li)

在這裡插入圖片描述

1-3)在索引2前面新增元素cat
li = [1, 2, 3]
li.insert(2, 'cat'
) print(li)

在這裡插入圖片描述

1-4)一次追加多個元素
li = [1, 2, 3]  # 新增4, 5, 6
li.extend([4, 5, 6])
print(li)

在這裡插入圖片描述

2)修改

通過索引和切片重新賦值的方式

li = [1, 2, 3]
li[0] = 'cat'
li[-1] = 'westos'
print(li)
li = [1, 2, 3]
li[:2] = ['cat', 'westos']
print(li)

在這裡插入圖片描述

3)檢視

通過索引和切片檢視元素, 檢視索引值和出現次數

li = [1, 2, 3, 1, 1, 3]
print(li.count(1))   # 3
print(li.index(3))   # 2

在這裡插入圖片描述

4)刪除

4-1)根據索引刪除
li = [1, 2, 3]
# 將pop方法的結果儲存到delete_num變數中。
delete_num = li.pop(-1)
print(li)
print("刪除的元素是:", delete_num)

在這裡插入圖片描述

4-2)根據value值刪除
li = [1, 2, 3]
li.remove(1)
print(li)

在這裡插入圖片描述

4-3)全部清空
li = [1, 2, 3]
li.clear()
print(li)

在這裡插入圖片描述

5)其他操作

reverse和sort

sort排序預設由小到大。 如果想由大到小排序,
設定reverse=True

li = [18, 6, 99, 56]
li.reverse()  # 類似於li[::-1]
print(li)


li.sort(reverse=True)
print(li)

li1 = li.copy()
print(id(li), id(li1))
print(li, li1)

在這裡插入圖片描述

二.元組

1.元組的操作

元組tuple(戴了緊箍咒的列表, 不能修改元素)

1-1) 元組的建立

重要(易錯點):元組只有一個元素時一定要加逗號

t1 = ()    # 空元組
print(t1, type(t1))
t2 = (1,)   # 重要(易錯點):元組只有一個元素時一定要加逗號
print(t2, type(t2))
t3 = (1, 1.2, True, [1, 2, 3])
print(t3, type(t3))

在這裡插入圖片描述

1-2) 特性

print((1, 2, 3) + (3,))
print((1, 2, 3) * 2)
print(1 in (1, 2, 3))
t = (1, 2, 3)
print(t[0])
print(t[-1])
print(t[:2])
print(t[1:])
print(t[::-1])

在這裡插入圖片描述

1-3) 檢視

通過索引和切片檢視元素。 檢視索引值和出現次數。
元組是不可變資料型別(不能增刪改)

t = (1, 2, 3, 1, 1, 3)
print(t.count(1))   # 3
print(t.index(3))   # 2

在這裡插入圖片描述

三.命名元組的操作

從collections模組中匯入namedtuple工具

from collections import  namedtuple

建立命名元組物件User

User = namedtuple('User', ('name', 'age', 'city'))

給命名元組傳值

user1 = User("westos", 18, "西安")

列印命名元組

print(user1)

獲取命名元組指定的資訊

print(user1.name)
print(user1.age)
print(user1.city)

在這裡插入圖片描述

四.is和==的區別

python語言:
==: 型別和值是否相等
is: 型別和值是否相等, 記憶體地址是否相等

print(1 == '1')   # False
li = [1, 2, 3]
li1 = li.copy()
print(li == li1)  # True

在這裡插入圖片描述

檢視記憶體地址

print(id(li), id(li1))
print(li is li1)  # False

在這裡插入圖片描述

五. 地址引用和深拷貝和淺拷貝

1.值的引用

n1 = [1, 2, 3]
n2 = n1
n1.append(4)
print(n2)  

在這裡插入圖片描述

2. 拷貝:淺拷貝和深拷貝

2-1) 淺拷貝

n1 = [1, 2, 3]
n2 = n1.copy()   # n1.copy和n1[:]都可以實現拷貝。
print(id(n1), id(n2))
n1.append(4)
print(n2)

在這裡插入圖片描述

2-2) 為什麼需要深拷貝

如果列表的元素包含可變資料型別, 一定要使用深拷貝。

可變資料型別(可增刪改的): list
不可變資料型別:數值,str, tuple, namedtuple

n1 = [1, 2, [1, 2]]
n2 = n1.copy()
# n1和n2的記憶體地址:的確拷貝了
print(id(n1), id(n2))
# n1[-1]和n2[-1]的記憶體地址:
print(id(n1[-1]), id(n2[-1]))
n1[-1].append(4)  # n1 = [1, 2, [1, 2, 4]]
print(n2)

在這裡插入圖片描述

深拷貝和淺拷貝最根本的區別在於是否真正獲取一個物件的複製實體,而不是引用。
假設B複製了A,修改A的時候,看B是否發生變化:
如果B跟著也變了,說明是淺拷貝,拿人手短!(修改堆記憶體中的同一個值)
如果B沒有改變,說明是深拷貝,自食其力!(修改堆記憶體中的不同的值)

2-3) 如何讓實現深拷貝?copy.depcopy

import copy
n1 = [1, 2, [1, 2]]
n2 = copy.deepcopy(n1)
# n1和n2的記憶體地址:的確拷貝了
print(id(n1), id(n2))
# n1[-1]和n2[-1]的記憶體地址:
print(id(n1[-1]), id(n2[-1]))
n1[-1].append(4)  # n1 = [1, 2, [1, 2, 4]]
print(n2)

在這裡插入圖片描述