溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹

發(fā)布時(shí)間:2021-08-02 15:29:16 來(lái)源:億速云 閱讀:76 作者:chen 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目錄
  • 1. 序列

  • 2. 列表

    • 2.1 列表的特性

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

      • 2.1.3 列表的索引

      • 2.1.4 列表的切片

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

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

      • 2.2.1 列表的增加

      • 2.2.2 列表的修改

      • 2.2.3 查看

      • 2.2.4 列表的刪除

      • 2.2.5 其他操作

  • 3. 元組

    • 3.1 元組的創(chuàng)建

      • 3.2 元組的特性

        • 3.3 元組的命名

        • 4. 深拷貝和淺拷貝

          • 4.1 值的引用

            • 4.2 淺拷貝

              • 4.3 深拷貝

              • 5. is 和 ==的對(duì)比

                • 總結(jié)

                  1. 序列

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

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

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

                  2. 列表

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

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

                  列表的創(chuàng)建:

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

                  2.1 列表的特性

                  Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹

                  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所以會(huì)默認(rèn)認(rèn)為1屬于該列表
                  print(1 in ["a", False, [1,2]])  #False
                  2.1.3 列表的索引

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

                  li = [1,2,3,[1,2,3]]
                  print(li[0])    #返回?cái)?shù)值1
                  print(li[-1])    #返回倒數(shù)第一個(gè)值[1, 2, 3]
                  li1 = [1,2,3,[1,"b",3]]
                  print(li1[-1])    #返回倒數(shù)第一個(gè)值[1, 'b', 3]
                  print(li1[-1][0])    #返回倒數(shù)第一個(gè)元素中的第一個(gè)元值 1
                  print(li1[3][-1])    #返回第四個(gè)元素中的倒數(shù)第一個(gè)值 3
                  2.1.4 列表的切片
                  li = ['172','25','254','100']
                  print(li[:2])   #拿出列表中的前兩個(gè)元素['172', '25']	
                  print(li[1:])   #拿出列表中的第二個(gè)到最后一個(gè)元素['25', '254', '100']
                  print(li[::-1]) #將列表反轉(zhuǎn)['100', '254', '25', '172']

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

                  print('-'.join(li[3:0:-1]))	#表示從第四個(gè)元素開(kāi)始,倒序依次拿出然后再拼接起來(lái)
                  print('-'.join(li[:0:-1]))	#表示從最后一個(gè)元素開(kāi)始,倒序依次拿出然后再拼接起來(lái)
                  print('-'.join(li[1:][::-1]))	#表示從第二個(gè)元素開(kāi)始,全部拿出之后在倒序拼接
                  2.1.5 列表的循環(huán)(for)
                  names = ['小張','張哥','張師']
                  for name in names:
                      print(f"zxk的別名是:{name}")

                  Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹

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

                  2.2.1 列表的增加

                  追加

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

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

                  在列表開(kāi)頭添加

                  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]

                  一次追加多個(gè)元素

                  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 列表的修改

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

                  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']   #表示從第一個(gè)開(kāi)始修改兩個(gè)['cat', 'westos', 3]
                  print(li)
                  2.2.3 查看

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

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

                  根據(jù)索引刪除

                  li = [1,2,3]
                  #print(li.pop(1))    #將縮索引的第一個(gè)刪除,[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來(lái)反轉(zhuǎn)
                  li.sort(reverse=True)     
                  print(li)	 	 #從大到小排序[20, 13, 5, 4]
                  
                  li1 = li.copy()		
                  print(id(li),id(li1))   #復(fù)制前后兩個(gè)列表的ID不一樣 2097933779264 2097933779648
                  print(li,li1)   	#[20, 13, 5, 4] [20, 13, 5, 4]

                  3. 元組

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

                  3.1 元組的創(chuàng)建

                  元組中只有一個(gè)元素時(shí)一定要添加逗號(hào),不然會(huì)將其試做對(duì)應(yīng)的信息,

                  t1 = () 	#空元組
                  print(t1,type(t1))
                  t2 = (1)    #只有單個(gè)元素時(shí)不是元組,當(dāng)要是元組是要加逗號(hào)
                  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 元組的特性

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

                  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)

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

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

                  3.3 元組的命名

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

                  實(shí)例化命名元組

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

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

                  from collections import namedtuple
                  #1.創(chuàng)建命名元組對(duì)象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. 深拷貝和淺拷貝

                  Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹

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

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

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

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

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

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

                  4.1 值的引用

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

                  因?yàn)閚um1和num2指向同一個(gè)內(nèi)存空間,所以當(dāng)nums1添加值時(shí),相當(dāng)于nums2也添加了值。

                  4.2 淺拷貝

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

                  加粗樣式

                  4.3 深拷貝

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

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

                  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)存地址:    #最后一個(gè)元素的地址: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ū)別在于是否真正獲取一個(gè)對(duì)象的復(fù)制實(shí)體,而不是引用。
                  假設(shè)B復(fù)制了A,在修改A的時(shí)候,看B是否發(fā)生變化:
                  如果B跟著也變了,說(shuō)明是淺拷貝,拿人手短!(修改堆內(nèi)存中的同一個(gè)值)
                  如果B沒(méi)有改變,說(shuō)明是深拷貝,自食其力?。ㄐ薷亩褍?nèi)存中的不同的值)

                  如何實(shí)現(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]))    #最后一個(gè)元素的地址:2894603422272 2894603419776
                  n1[-1].append(4)     #n1 = [1, 2, [1, 2, 4]]
                  print(n2)            #n2 = [1, 2, [1, 2]]

                  5. is 和 ==的對(duì)比

                  在 python 語(yǔ)言中 :

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

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

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

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

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

                  3). ==用來(lái)比較判斷兩個(gè)對(duì)象的value(值)是否相等;(type和value)
                  is也被叫做同一性運(yùn)算符, 會(huì)判斷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)

                  編寫(xiě)一個(gè)云主機(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)
                  請(qǐng)輸入您的選擇:"""
                  # 1. 所有云主機(jī)信息如何存儲(chǔ)?選擇哪種類型存儲(chǔ)?  選擇列表
                  # 2. 每個(gè)云主機(jī)信息該如何存儲(chǔ)?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}對(duì)應(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'對(duì)應(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ī)總個(gè)數(shù)為:{count}')
                      elif choice == '5':
                          print("系統(tǒng)正在退出,歡迎下次使用......")
                          exit()
                      else:
                          print("請(qǐng)輸入正確的選項(xiàng)!")

                  Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹

                  “Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組的詳細(xì)介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

                  向AI問(wèn)一下細(xì)節(jié)

                  免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

                  AI