1. 程式人生 > >python學習第七天 基礎數據類型補充 深淺copy 集合 關鍵字後面加可叠代對象

python學習第七天 基礎數據類型補充 深淺copy 集合 關鍵字後面加可叠代對象

div ext split() 不可變 append 鍵值對 port [] 賦值

在基礎數據類型中可能遇到的坑:

  元組:

    tuple1=(1) 的數據類型是int , tuple2=(‘alex‘)的數據類型是str 等

    tuple1=(1,) 和 tuple2的數據類型是 tuple

  列表:

    列表與列表之間可以相加,但不可以減(面試題)

list1=[1,2,3]
list2=[‘a‘,‘b‘]
list3=list1+list2
print(list3)
#[1, 2, 3, ‘a‘, ‘b‘]

  對於可變數據類型容易遇到的坑:

    列表: 在for循環中刪除列表中的元素,索引會跟著變化

技術分享圖片
# 刪除列表中偶數索引對應的元素
# 方法1:新建一個列表,將奇數索引對應的元素添加進去
list1=[1,2,3,4,5,6,7]
list2=[]
for i in list1:
    if list1.index(i) % 2 == 1:
        list2.append(i)
print(list2
技術分享圖片
# 方法2:從列表的最後開始刪
list1=[1,2,3,4,5,6,7]
for i in range(len(list1)-1,-1,-1):
    if i % 2 == 0:
        list1.pop(i)
print(list1)
# 方法3
# list1=[1,2,3,4,5,6,7]
# del list1[0::2]
# print(list1)

  字典: 在for循環中刪除字典中的鍵值對,for循環會報錯

技術分享圖片
# 刪除字典中含k的鍵
# 方法1:將keys提取到列表中,循環去除
dic={‘k1‘:1,‘k2‘:2,‘name‘:3}
list1=list(dic.keys())
for i in list1:
    if ‘k‘ in i:
        dic.pop(i)
print(dic)
技術分享圖片

技術分享圖片
# # 方法2
# dic={‘k1‘:1,‘k2‘:2,‘name‘:3}
# dic2={}
# for k in dic.keys():
#     if ‘k‘ not in k:
#         dic2.setdefault(k,dic[k])
# print(dic2)
技術分享圖片

  

    創建字典的3種方法(面試題)

    1.dic1={}

    2.dic2=dict()

    3.dic3=dict.fromkeys([‘key1‘,‘key2‘,‘key3‘],[ ]) fromkeys後面加可叠代數據

# dic3=dict.fromkeys([‘key1‘,‘key2‘,‘key3‘],[])
# dic3[‘key1‘]=‘alex‘
# print(dic3)
#{‘key1‘: ‘alex‘, ‘key2‘: [], ‘key3‘: []}

    區分:

# dic3=dict.fromkeys([‘key1‘,‘key2‘,‘key3‘],[])
# dic3[‘key1‘].append(‘1‘)
# print(dic3)
#{‘key1‘: [‘1‘], ‘key2‘: [‘1‘], ‘key3‘: [‘1‘]}

     

     dic4=dict.fromkeys([‘key1‘,‘key2‘,‘key3‘],‘alex‘)

dic3=dict.fromkeys([‘key1‘,‘key2‘,‘key3‘],‘egon‘)
print(dic3)
#{‘key1‘: ‘egon‘, ‘key2‘: ‘egon‘, ‘key3‘: ‘egon‘}

  集合:

    集合的創建:

      1. set1={1,2,3}

      2.set2=set()

    特點:

      集合本身是可變數據類型 frozenset(set1): 凍集合,可以做字典的鍵

      集合裏面的元素必須是不可變數據類型

      集合是無序的

      集合天然去重 (面試題)

# 方法1:利用set去重
list1=[‘alex‘,‘egon‘,1,‘alex‘]
set1=set(list1)
list1=list(set1)
print(list1)

技術分享圖片
# 方法2:利用for循環去除
list1=[‘alex‘,‘egon‘,1,‘alex‘]
list2=[]
for i in list1:
    if i not in list2:
        list2.append(i)
print(list2)
技術分享圖片

  集合的增和刪

    增:

      add

      update 相當於list 的extend

    刪:

      remove 按元素刪

      pop 隨機刪

      clear 清空

      del 內存級別刪

數據類型之間的相互轉換:

  1.

    str-->list : split()

    list-->str : join 列表裏只能由字符串類型的數據,有其他類型的數據會報錯

list1=[‘alex‘,‘egon‘,‘alex‘]
s=‘_‘.join(list1)
print(s)

  2.

    dict-->list:

      list(dic.keys())

      list(dic.values())

      list(dic.ites())

    list-->dict:

      列表不能轉換為字典

  3.

    tuple-->list: list1=list(set())

    list-->tuple: tuple1=tuple(list())

賦值=與深淺copy:

  賦值 = : 數據一樣,id也一樣

  淺copy: 數據一樣,裏層的id一樣,最外層的id不一樣 (int str bool類型沒有淺copy)

list1=[1,2,3]
list2=list1.copy()
print(id(list1),id(list2))
print(id(list1[0]),id(list2[0]))
#1866482736328 1866482736264
#1887330528 1887330528

  

  深copy:數據一樣,裏層外層的id都不一樣 (int str bool類型有深copy但id不變)

import copy
list1=[1,2,3]
list2=copy.deepcopy(list1)
print(id(list1),id(list2))
print(id(list1[0]),id(list2[0]))

關於一些關鍵字後面加可叠代對象

  enumerate

  ‘ ‘.join()

  for循環

python學習第七天 基礎數據類型補充 深淺copy 集合 關鍵字後面加可叠代對象