主頁 > 知識庫 > Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組示例詳解

Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組示例詳解

熱門標(biāo)簽:成都呼叫中心外呼系統(tǒng)哪家強(qiáng) 無錫智能外呼系統(tǒng)好用嗎 電梯新時達(dá)系統(tǒng)外呼顯示e 百應(yīng)電話機(jī)器人總部 旅游廁所地圖標(biāo)注怎么弄 南昌地圖標(biāo)注 宿州電話機(jī)器人哪家好 西青語音電銷機(jī)器人哪家好 地圖標(biāo)注與注銷

1. 序列

序列:成員有序排列,可以通過下標(biāo)偏移量訪問到它的一個或者幾個成員,這類類型統(tǒng)稱為序列。

序列數(shù)據(jù)包括:字符串、列表和元組類型。

特點:都支持索引和切片操作符;成員關(guān)系操作符(in,not in);連接符(+)重復(fù)操作符(*)

2. 列表

數(shù)組array:存儲同種數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)。[1,2,3],[1.1,2.2,3.1]

列表list:打了激素的數(shù)組,可以存儲不同數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)。[1,2.2,‘hello']

列表的創(chuàng)建:

li = []	#空擴(kuò)列表
print(li, type(li))
li1 = [1]	#只有一個元素的列表
print(li1, type(li1))

2.1 列表的特性

2.1.1 列表的連接操作符和重復(fù)操作符

print([1,2] + [2,3])    #[1,2,2,3]
print([1,2] *3)     #[1,2,1,2,1,2]
2.1.2 列表的成員操作符(in,not in)
print(1 in [1,2,3]) #True
"""#返回的數(shù)據(jù)類型為bool型
布爾類型:
    True: 1
    False: 0
"""
print(1 in ["a", True, [1,2]])  #由于此處有True所以會默認(rèn)認(rèn)為1屬于該列表
print(1 in ["a", False, [1,2]])  #False

2.1.3 列表的索引

根據(jù)索引來返回索引到的值;

li = [1,2,3,[1,2,3]]
print(li[0])    #返回數(shù)值1
print(li[-1])    #返回倒數(shù)第一個值[1, 2, 3]
li1 = [1,2,3,[1,"b",3]]
print(li1[-1])    #返回倒數(shù)第一個值[1, 'b', 3]
print(li1[-1][0])    #返回倒數(shù)第一個元素中的第一個元值 1
print(li1[3][-1])    #返回第四個元素中的倒數(shù)第一個值 3

2.1.4 列表的切片

li = ['172','25','254','100']
print(li[:2])   #拿出列表中的前兩個元素['172', '25']	
print(li[1:])   #拿出列表中的第二個到最后一個元素['25', '254', '100']
print(li[::-1]) #將列表反轉(zhuǎn)['100', '254', '25', '172']

如已知一個列表信息為 [‘172',‘25',‘254',‘100'],現(xiàn)在需要輸出'100-254-25“;

print('-'.join(li[3:0:-1]))	#表示從第四個元素開始,倒序依次拿出然后再拼接起來
print('-'.join(li[:0:-1]))	#表示從最后一個元素開始,倒序依次拿出然后再拼接起來
print('-'.join(li[1:][::-1]))	#表示從第二個元素開始,全部拿出之后在倒序拼接

2.1.5 列表的循環(huán)(for)

names = ['小張','張哥','張師']
for name in names:
    print(f"zxk的別名是:{name}")

2.2 列表的基本操作(增刪改查)

2.2.1 列表的增加

追加

追加默認(rèn)是在列表的最后添加;

li = [1,2,3]
li.append(4)
print(li)		#[1, 2, 3, 4]

在列表開頭添加

li = [1,2,3]
li.insert(0,'cat')
print(li)	#['cat', 1, 2, 3]

li = [1,2,3]
li.insert(2,'cat')
print(li)	#在索引2前面添加cat[1, 2, 'cat', 3]

一次追加多個元素

li = [1,2,3] 	   #添加4,5,6,
li.append([4,5,6])  
print(li)			#[1, 2, 3, [4, 5, 6]]
li.extend([4,5,6])  
print(li)			#[1, 2, 3, 4, 5, 6]

2.2.2 列表的修改

通過索引和切片重新賦值的方式去修改;

li = [1,2,3]
li[0] = 'cat'      
print(li)			#['cat', 2, 3]
li[-1] = 'westos' 
print(li)			#['cat', 2, 'westos']
li = [1,2,3]
li[:2] = ['cat','westos']   #表示從第一個開始修改兩個['cat', 'westos', 3]
print(li)

2.2.3 查看

通過索引和切片查看元素,查看索引值和出現(xiàn)次數(shù);

li = [1,2,3,4,3,2,3]
print(li.count(1))  #查看數(shù)字1出現(xiàn)的次數(shù)
print(li.index(3))  #查看元素對應(yīng)的索引

2.2.4 列表的刪除

根據(jù)索引刪除

li = [1,2,3]
#print(li.pop(1))    #將縮索引的第一個刪除,[1, 3]
delete_num = li.pop(-1)
print(li)
print("刪除的元素是:",delete_num) #刪除的元素是: 3

根據(jù)value值刪除

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

全部清空

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

2.2.5 其他操作

除了上面的之外還有反轉(zhuǎn),排序,復(fù)制等操作;

li =[5,4,13,20]	
li.reverse()   
print(li)		#反轉(zhuǎn) [20, 13, 4, 5]

li.sort()  	
print(li)		 #從小到大排序[4, 5, 13, 20]
#sort默認(rèn)從小到大,如果想要從大到小,需要用reverse來反轉(zhuǎn)
li.sort(reverse=True)     
print(li)	 	 #從大到小排序[20, 13, 5, 4]

li1 = li.copy()		
print(id(li),id(li1))   #復(fù)制前后兩個列表的ID不一樣 2097933779264 2097933779648
print(li,li1)   	#[20, 13, 5, 4] [20, 13, 5, 4]

3. 元組

元組tuple:帶了緊箍咒的列表,和列表的唯一區(qū)別是不能增刪改。

3.1 元組的創(chuàng)建

元組中只有一個元素時一定要添加逗號,不然會將其試做對應(yīng)的信息,

t1 = () 	#空元組
print(t1,type(t1))
t2 = (1)    #只有單個元素時不是元組,當(dāng)要是元組是要加逗號
print(t2,type(t2))	#1 class 'int'>
t3 = (1,2.2,True,[1,2,3,])  
print(t3,type(t3))	##(1, 2.2, True, [1, 2, 3]) class 'tuple'>

3.2 元組的特性

由于元組是帶了緊箍咒的列表,所以沒有增刪改的特性;

1. 連接符和重復(fù)操作符
print((1,2,3)+(3,)) #(1, 2, 3, 3)
print((1,2,3) *2)   #(1, 2, 3, 1, 2, 3)
2. 成員操作符
print(1 in (1,2,3)) #True
3. 切片和索引
t = (1,2,3)
print(t[0])     #1
print(t[-1])    #3
print(t[:2])    #(1, 2)
print(t[1:])    #(2, 3)
print(t[::-1])  #(3, 2, 1)

查看:通過索引和切片查看元素,查看索引值和出現(xiàn)次數(shù);

t = (1,4,5,2,3,4)
print(t.count(4))   #統(tǒng)計4出現(xiàn)的次數(shù),返回值為2
print(t.index(2))   #查看元素2 的,返回的索引值為3

3.3 元組的命名

Tuple還有一個兄弟,叫namedtuple。雖然都是tuple,但是功能更為強(qiáng)大。
collections.namedtuple(typename, field_names)
typename:類名稱
field_names: 元組中元素的名稱

實例化命名元組

# import datetime
# today = datetime.date.today()
# print(today)
tuple = ('name','age','city')	#普通的元組格式,當(dāng)需要取出時,需要一個一個取出信息
print(tuple[0],tuple[1],tuple[2])	# name age city

可以從collections模塊中導(dǎo)入namedtuple工具:

from collections import namedtuple
#1.創(chuàng)建命名元組對象User
User = namedtuple('User',('name','age','city'))
#2.給命名元組傳值
user1 = User("zxk",24,"西安")
#3.打印命名元組
print(user1)        #User(name='zxk', age=24, city='西安')
# 4. 獲取命名元組指定的信息
print(user1.name)   #zxk
print(user1.age)    #24
print(user1.city)   #西安

4. 深拷貝和淺拷貝

問題: 深拷貝和淺拷貝的區(qū)別? python中如何拷貝一個對象?

賦值: 創(chuàng)建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。(=)

淺拷貝: 對另外一個變量的內(nèi)存地址的拷貝,這兩個變量指向同一個內(nèi)存地址的變量值。(li.copy(), copy.copy())

公用一個值;
這兩個變量的內(nèi)存地址一樣;
對其中一個變量的值改變,另外一個變量的值也會改變;

深拷貝: 一個變量對另外一個變量的值拷貝。(copy.deepcopy())

兩個變量的內(nèi)存地址不同;
兩個變量各有自己的值,且互不影響;
對其任意一個變量的值的改變不會影響另外一個;

4.1 值的引用

nums1 = [1,2,3]
nums2 = nums1
nums1.append(4)
print(nums2)       # [1, 2, 3, 4]

因為num1和num2指向同一個內(nèi)存空間,所以當(dāng)nums1添加值時,相當(dāng)于nums2也添加了值。

4.2 淺拷貝

n1 = [1,2,3]
n2 = n1.copy() 		 #n1.copy和n1[:]都可以實現(xiàn)拷貝。
print(id(n1),id(n2))	#2708901331648 2708901331264
n1.append(4)
print(n2)       #n1和n2的內(nèi)存地址不同,修改并不互相影響 [1, 2, 3]

加粗樣式

4.3 深拷貝

有列表嵌套時,或者說列表中包含可變數(shù)據(jù)類型時,一定要選擇深拷貝.

可變數(shù)據(jù)類型(可增刪改的):列表(list)
不可變數(shù)據(jù)類型:數(shù)值,字符串(str),元組(tuple) namedtuple;變量指向內(nèi)存空間的值不會改變。

n1 = [1,2,[1,2]]
n2 = n1.copy()
#n1和n2的內(nèi)存地址:的確拷貝了   #2859072423168 2859072422336
print(id(n1),id(n2))
#n1[-1]和n2[-1]的內(nèi)存地址:    #最后一個元素的地址:2859072425664 2859072425664
print(id(n1[-1]),id(n2[-1]))
n1[-1].append(4)
print(n1)	#[1, 2, [1, 2, 4]]
print(n2)   #[1, 2, [1, 2, 4]]

深拷貝和淺拷貝最根本的區(qū)別在于是否真正獲取一個對象的復(fù)制實體,而不是引用。
假設(shè)B復(fù)制了A,在修改A的時候,看B是否發(fā)生變化:
如果B跟著也變了,說明是淺拷貝,拿人手短!(修改堆內(nèi)存中的同一個值)
如果B沒有改變,說明是深拷貝,自食其力?。ㄐ薷亩褍?nèi)存中的不同的值)

如何實現(xiàn)深拷貝 copy.deepcopy

import copy
n1 = [1,2,[1,2]]
n2 = copy.deepcopy(n1)
#n1和n2的內(nèi)存地址:的確拷貝了
print(id(n1),id(n2))    #2894603422016 2894603421056
#n1[-1]和n2[-1]的內(nèi)存地址:
print(id(n1[-1]),id(n2[-1]))    #最后一個元素的地址:2894603422272 2894603419776
n1[-1].append(4)     #n1 = [1, 2, [1, 2, 4]]
print(n2)            #n2 = [1, 2, [1, 2]]

5. is 和 ==的對比

在 python 語言中 :

==:判斷類型和值是否相等

is: 類型和值是否相等,內(nèi)存地址是否相等

== is和==兩種運(yùn)算符在應(yīng)用上的本質(zhì)區(qū)別是:

1). Python中對象的三個基本要素,分別是:id(身份標(biāo)識)、type(數(shù)據(jù)類型)和value(值)。

2). is和==都是對對象進(jìn)行比較判斷作用的,但對對象比較判斷的內(nèi)容并不相同。

3). ==用來比較判斷兩個對象的value(值)是否相等;(type和value)
is也被叫做同一性運(yùn)算符, 會判斷id是否相同;(id, type 和value)

print(1 == '1') 	#由于數(shù)據(jù)類型不一致False
li = [1,2,3]
li1 = li.copy()
print(li == li1)    #True
#類型和值相等,但是內(nèi)存地址不相等
print(id(li),id(li1))
print(li is li1)    #False

快速注釋代碼的快捷鍵:ctrl+/
快速縮進(jìn)的快捷鍵:選中需要縮進(jìn)的代碼+tab
快速取消縮進(jìn)的快捷鍵:選中需要縮進(jìn)的代碼 ,按shift+tab

練習(xí):云主機(jī)管理系統(tǒng)

編寫一個云主機(jī)管理系統(tǒng):

- 創(chuàng)建云主機(jī)(IP,hostname,IDC)

- 搜索云主機(jī)(順序查找)

- 刪除云主機(jī)

-查看所有云主機(jī)信息

from collections import namedtuple
menu = """
        云主機(jī)管理系統(tǒng)
        1).添加云主機(jī)
        2).搜索云主機(jī)(IP搜索)
        3).刪除云主機(jī)
        4).云主機(jī)列表
        5). 退出系統(tǒng)
請輸入您的選擇:"""
# 1. 所有云主機(jī)信息如何存儲?選擇哪種類型存儲?  選擇列表
# 2. 每個云主機(jī)信息該如何存儲?IP,hostname.IDC  選擇命名元組
hosts = []
Host = namedtuple('Host',('ip','hostname','idc'))
while True:
    choice = input(menu)
    if choice == '1':
        print("添加云主機(jī)".center(50,"*"))
        ip = input("ip:")
        hostname = input("hostname:")
        idc = input("idc(eg:ali,huawei...):")
        host1 = Host(ip,hostname,idc)
        hosts.append(host1)
        print(f"添加{idc}的云主機(jī)成功。IP地址為{ip}")
    elif choice == '2':
        #怎么搜索:for循環(huán)(for..else),判斷,break
        print("搜索云主機(jī)".center(50,"*"))
        for host in hosts:
            ipv4 = input("please input ipv4:")
            if ipv4 == host.ip:
                print(f'{ipv4}對應(yīng)的主機(jī)為{host.hostname}')
            else:
                break
    elif choice == '3':
        print("刪除云主機(jī)".center(50,"*"))
        for host in hosts:
            delete_hostname = input("please input delete hostname:")
            if delete_hostname == host.hostname:
                hosts.remove(host)
                print(f'對應(yīng)的主機(jī){delete_hostname}已經(jīng)刪除')
            else:
                break
    elif choice == '4':
        print("云主機(jī)列表".center(50,"*"))
        print("IP\t\t\thostname\tidc")
        count = 0
        for host in hosts:
            count +=1
            print(f"{host.ip}\t{host.hostname}\t{host.idc}")
            print(f'云主機(jī)總個數(shù)為:{count}')
    elif choice == '5':
        print("系統(tǒng)正在退出,歡迎下次使用......")
        exit()
    else:
        print("請輸入正確的選項!")

總結(jié)

到此這篇關(guān)于Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的文章就介紹到這了,更多相關(guān)Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python 數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解
  • python三種數(shù)據(jù)結(jié)構(gòu)及13種創(chuàng)建方法總結(jié)
  • python數(shù)據(jù)結(jié)構(gòu)的排序算法
  • Python二進(jìn)制數(shù)據(jù)結(jié)構(gòu)Struct的具體使用
  • python用sqlacodegen根據(jù)已有數(shù)據(jù)庫(表)結(jié)構(gòu)生成對應(yīng)SQLAlchemy模型
  • Python數(shù)據(jù)結(jié)構(gòu)之圖的存儲結(jié)構(gòu)詳解
  • Python數(shù)據(jù)結(jié)構(gòu)之二叉排序樹的定義、查找、插入、構(gòu)造、刪除
  • Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級隊列queue用法詳解
  • 詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack
  • Python數(shù)據(jù)結(jié)構(gòu)詳細(xì)

標(biāo)簽:七臺河 渭南 雅安 許昌 贛州 西安 濰坊 辛集

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組示例詳解》,本文關(guān)鍵詞  Python,內(nèi)置,數(shù)據(jù)結(jié)構(gòu),列表,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組示例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章