python学习第七天 基础数据类型补充 深浅copy 集合 关键字后面加可迭代对象

2021-07-17 01:05

阅读:718

标签:python   bool   试题   spl   from   alt   复制   偶数   特点   

在基础数据类型中可能遇到的坑:

  元组:

    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 集合 关键字后面加可迭代对象

标签:python   bool   试题   spl   from   alt   复制   偶数   特点   

原文地址:https://www.cnblogs.com/jiandanxie/p/9532966.html

上一篇:python和ftp

下一篇:C++ 双目运算符重载


评论


亲,登录后才可以留言!