• Python笔记2(数据类型)


    一、数字int

    数字主要是用于计算、运算。使用方法并不是很多,就记住一种就可以:

     1 '''
     2 bit_length()将十进制转化为二进制站的位数
     3 二进制             十进制
     4 0000 0001            1
     5 0000 0010            2
     6 0000 0011            3
     7 0000 0100            4
     8 '''
     9 i=3
    10 j=4
    11 print(i.bit_length())#>>>2
    12 print(j.bit_length())#>>>3

    二、布尔值bool

    布尔值就两种:True,False。就是反应条件的正确与否。

     1 '''
     2    数字与字符串转化
     3    int ---> str : str(int)
     4    str ---> int : int(str) str必须全部是数字组成
     5    布尔型与数字、字符串转化
     6    int ---> bool:0        ---> False  非0       ---> True
     7    bool---> int :int(True)---> 1      int(False)---> 0
     8    str ---> bool:空字符串  ---> False  非空字符串---> True
     9 '''
    10 print(int(True))#>>>1
    11 print(int(False))#>>>0
    12 print(bool(''))#>>>False
    13 print(bool('a'))#>>>False

     三、字符串

    1、字符串的索引

     索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。

    1 s='Hello World!'
    2 s1=s[0]#第一个元素
    3 s2=s[-1]#最后一个元素
    4 s3=s[-2]#倒数第二个元素
    5 print(s1)#>>>H
    6 print(s2)#>>>!
    7 print(s3)#>>>d

    2、字符串的切片

    切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾首不顾尾)。

    s1=s[起始索引:结束索引:步长]

     1 s='Hello World!'
     2 s1=s[0:3]#从字符串的第1个字符到第3个字符进行切片
     3 s2=s[:3]#0可以省略
     4 s3=s[3:9]#从字符串的第4个字符到第9个字符进行切片
     5 s4=s[:5:2]#从字符串的第1个字符到第5个字符进行切片,加步长2
     6 s5=s[:]#把字符串全部取出来
     7 s6=s[-1:-4:-1]#反向取字符串,加反向步长
     8 print(s1)#>>>Hel
     9 print(s2)#>>>Hel
    10 print(s3)#>>>lo Wor
    11 print(s4)#>>>Hlo
    12 print(s5)#>>>Hello World!
    13 print(s6)#>>>!dl

    3、字符串常用的方法

    1)* captalize()  首字母大写

    1 s='Hello World!'
    2 s1=s.capitalize()
    3 print(s1)#>>>Hello world!

    2)***upper()  字母全部大写   lower() 字母全部小写

    1 s='Hello World!'
    2 s2=s.upper()
    3 s3=s.lower()
    4 print(s2)#>>>HELLO WORLD!
    5 print(s3)#>>>hello world!
    1 #例  验证码不区分大小写
    2 code = 'QcaR'.upper()
    3 your_code =input('请输入验证码:').upper()
    4 if  your_code == code :
    5     print('验证成功')

    3)swapcase()  大小写翻转

    1 s='Hello World!'
    2 s1=s.swapcase()
    3 print(s1)#>>>hELLO wORLD!

    4)title()  非字母的元素隔开的每个单词首字母大写

    1 msg='hello world_hello*world'
    2 print(msg.title())#>>>Hello World_Hello*World

    5)center() 内容居中,总长度自己设定,默认填充None

    1 s='Hello World!'
    2 s1=s.center(20,"*")
    3 s2=s.center(20,)
    4 print(s1)#>>>****Hello World!****
    5 print(s2)#>>>    Hello World!

    6)*** strartwith() 判断以什么为开头      *** endswith() 判断以什么为结尾

    1 s='Hello World!'
    2 s1=s.startswith('H')
    3 print(s1)#>>>True
    4 s2=s.startswith('He')
    5 print(s2)#>>>True
    6 s3=s.startswith('e',1,5)#切片截取的字符串是否以‘e’为开头
    7 print(s3)#>>>True
    8 s4=s.endswith('!')
    9 print(s4)#>>>True

    7)strip() 去除首位的空格,制表符 ,换行符 。不仅仅是去除空格

    注:lstrip() 只除字符串左边的;rstrip() 只除字符串右边的;

     1 s='   Hello World!   '
     2 ss='	Hello World!
    '
     3 s1=s.strip()
     4 print(s1)#>>>Hello World!
     5 s2=ss.strip()
     6 print(s2)#>>>Hello World!
     7 sss='tHello World!te'
     8 s3=sss.strip('t')#去掉字符串首尾的‘t’
     9 print(s3)#>>>Hello World!te
    10 s4=sss.strip('tey')#跌带去除首尾的‘t’、‘e’、‘y’,无序
    11 print(s4)#>>>Hello World!
    1 # 例  去除用户输入的空格
    2 name = input('>>>').strip()
    3 if name == 'oldboy':
    4     print('验证成功')

     8)#split()  字符串 转化 列表

     1 s='Hello World!'
     2 s1=s.split()
     3 print(s1)#>>>['Hello', 'World!']
     4 ss='He,llo Wo,rld!'
     5 s2=ss.split(',')
     6 print(s2)#>>>['He', 'llo Wo', 'rld!']
     7 sss='oHello World!'
     8 s3=sss.split('o')
     9 print(s3)#>>>['', 'Hell', ' W', 'rld!']
    10 s4=sss.split('o',1)
    11 print(s4)#>>>['', 'Hello World!']

    9)join()  将列表 转化 字符串

    注:如果列表里是非字符串元素,会报错

    s='Hello World!'
    s1='+'.join(s)
    print(s1)#>>>H+e+l+l+o+ +W+o+r+l+d+!
    s2='_'.join(s)
    print(s2)#>>>H_e_l_l_o_ _W_o_r_l_d_!
    ss=['Hello','World','!']
    s3='_'.join(ss)
    print(s3)#>>>Hello_World_!

     10)replace() 把字符串的旧字符串替换成新的字符串,如果指定第三个参数max,则替换不超过max次。

    语法:str.replace(old,new[,max])

    1 s='Hello World!'
    2 s1=s.replace('W','w')
    3 print(s1)#>>>Hello world!

    11)find()  通过元素找索引     index()  通过元素找索引 找不到元素会报错

    1 s='Hello World!'
    2 s1=s.find("e",1,6)
    3 print(s1)#>>>1
    4 s2=s.find("m",1,6)
    5 print(s2)#>>>-1
    6 s2=s.index("o",1,6)
    7 print(s2)#>>>4

    12)formac()   格式化输出

    1 s1='我叫{},今年{}岁,爱好{}'.format('Lucy','18','羽毛球')
    2 print(s1)#>>>我叫Lucy,今年18岁,爱好羽毛球
    3 s2='我叫{0},今年{1}岁,爱好{2}'.format('Lucy','18','羽毛球')#可以按照索引进行替换
    4 print(s2)#>>>我叫Lucy,今年18岁,爱好羽毛球

    13)is系列

    1 s='a123'
    2 print(s.isdigit())#字符串由数字组成
    3 print(s.isalpha())#字符串由字母组成
    4 print(s.isalnum())#字符串由字母或数字组成

    14)公共方法 :len()  返回对象的长度或项目个数; count() 数字字符串的元素出现的个数

    1 s='hello world'
    2 s1=len(s)
    3 print(s1)#>>>11
    4 s2=s.count("l",0,10)
    5 print(s2)#>>>3

     四、列表

           列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组。列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

    1、增

     1 #append()  在最后追加元素,无返回值
     2 l1=[111,'aaa',222,'bbb']
     3 l1.append('123abc')
     4 print(l1)#>>>[111, 'aaa', 222, 'bbb', '123abc']
     5 #insert() 插入
     6 l2=[111,'aaa',222,'bbb']
     7 l2.insert(1,'ccc')
     8 print(l2)#>>>[111, 'ccc', 'aaa', 222, 'bbb']
     9 #extend 迭代着增加
    10 l3=[111,'aaa',222,'bbb']
    11 l3.extend('ddd')
    12 print(l3)#>>>[111, 'aaa', 222, 'bbb', 'd', 'd', 'd']
    13 l4=[111,'aaa',222,'bbb']
    14 l4.extend(['333','444'])
    15 print(l4)#>>>[111, 'aaa', 222, 'bbb', '333', '444']
    列表的增

    2、删

     1 #pop 按照索引删除,有返回值,增删改查中唯一一个有返回值的
     2 l1=[111,'aaa',222,'bbb']
     3 print(l1.pop(0))#>>>111
     4 print(l1)#>>>['aaa', 222, 'bbb']
     5 #remove
     6 l1=[111,'aaa',222,'bbb']
     7 l1.remove('aaa')
     8 print(l1)#>>>[111, 222, 'bbb']
     9 #clear 清空列表,删除内容,但是在内存中还占用空间
    10 l1=[111,'aaa',222,'bbb']
    11 l1.clear()
    12 print(l1)#>>>[]
    13 #del 内存级别删除列表
    14 l1=[111,'aaa',222,'bbb']
    15 del l1
    16 print(l1)#报错,内存中删除列表
    17 #del 按照元素删除
    18 l1=[111,'aaa',222,'bbb']
    19 del l1[1]
    20 print(l1)#>>>[111, 222, 'bbb']
    21 #del 切片删除
    22 l1=[111,'aaa',222,'bbb']
    23 del l1[:3]
    24 print(l1)#>>>['bbb']
    列表的删

    3、改

    1 #按照索引去改
    2 l1=[111,'aaa',222,'bbb']
    3 l1[2]='ccc'
    4 print(l1)#>>>[111, 'aaa', 'ccc', 'bbb']
    5 #按切片去改  1.按切片的元素删除;2.按照添加的组成最小元素添加
    6 l1=[111,'aaa',222,'bbb']
    7 l1[:2]='abc'
    8 print(l1)#>>>['a', 'b', 'c', 222, 'bbb']
    列表的改

    4、查

     1 li=[111,'aaa',222,'bbb']
     2 #按照索引去查
     3 print(li[1])#>>>aaa
     4 print(li[-1])#>>>bbb
     5 #按照切片查询
     6 print(li[:2])#>>>[111, 'aaa']
     7 print(li[:3:2])#>>>[111, 222]
     8 #循环for
     9 for i in li:
    10     print(i)
    列表的查

    5、其他方法

     1 #count 计数
     2 l1=[111,'aaa',222,'bbb','aaa']
     3 print(l1.count('aaa'))#>>>2
     4 #len  返回对象的长度
     5 print(len(l1))#>>>5
     6 #通过元素找索引   列表中只有index
     7 print(l1.index('aaa'))#>>>1
     8 #排序
     9 # sort() 从小到大或从大到小排序
    10 l1=[3,6,4,7,6,9,1,2,5,0]
    11 l1.sort()#从小到大排序
    12 print(l1)#>>>[0, 1, 2, 3, 4, 5, 6, 6, 7, 9]
    13 l1.sort(reverse=True)#从大到小排序
    14 print(l1)#>>>[9, 7, 6, 6, 5, 4, 3, 2, 1, 0]
    15 #reverse 反向排序
    16 l1=[3,6,4,7,6,9,1,2,5,0]
    17 l1.reverse()
    18 print(l1)#>>>[0, 5, 2, 1, 9, 6, 7, 4, 6, 3]
    count() len() sort() reverse()

    6、列表的嵌套

     1 l1=[111,'aaa',222,'bbb',['ccc','ddd',10]]
     2 # 1.将aaa全部变成大写
     3 # 方法一
     4 l1[1]='AAA'
     5 print(l1)#>>>[111, 'AAA', 222, 'bbb', ['ccc', 'ddd',10]]
     6 # 方法二
     7 l1[1]=l1[1].upper()
     8 print(l1)#>>>[111, 'AAA', 222, 'bbb', ['ccc', 'ddd',10]]
     9 # 2.给['ccc','ddd']追加'eee'
    10 l1[-1].append('eee')
    11 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['ccc', 'ddd',10, 'eee']]
    12 # 3.将'ccc'首字母大写
    13 l1[-1][0]=l1[-1][0].capitalize()
    14 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['Ccc', 'ddd',10]]
    15 # 4.将10通过数字相加,或者字符串相加等等,变成‘100’
    16 # 方法一
    17 l1[-1][-1]=str(l1[-1][-1]+90)
    18 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['ccc', 'ddd', '100']]
    19 # 方法二
    20 l1[-1][-1]=str(l1[-1][-1])+'0'
    21 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['ccc', 'ddd', '100']]
    列表的嵌套

     五、字典

    字典的key是唯一的。key必须是不可变的数据类型,value是任意数据类型。

    数据类型分类:
    不可变数据类型(可哈希):str,bool,tuple,int。
    可变数据类型(不可哈希):dict,list,set。
    容器类数据类型:list,tuple,dict,set。
    字典:存储数据多,关系型数据,查询速度快(二分查找)

    二分查找:也称折半查找(Binary Search),它是一种高效率的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中的元素按关键字有序排列。

    备注:python3.5以前 (包含3.5),字典无序

               python3.6以后 (包含3.6),进行了优化,不清楚到底是有序还是无序

    1 dic={'name':'lucy','age':'18',[1,2,3]}
    2 print(dic)#输出时会报错,因为列表是不可哈希类型

    1、增

     1 #'='有则覆盖,无则添加
     2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
     3 dic['high']=170#有则不变,无则添加
     4 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': 170}
     5 #setdefault() 有则不变,无则添加
     6 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
     7 dic.setdefault('high')
     8 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': None}
     9 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    10 dic.setdefault('high',170)
    11 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': 170}
    12 dic.setdefault('name','lily')#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': 170}
    13 print(dic)
    列表的增

    2、删

     1 #pop() pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值
     2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
     3 print(dic.pop('name'))#>>>lucy
     4 print(dic)#>>>{'age': '18', 'hobby': '羽毛球'}
     5 #pop() 删除不存在的键不会报错,返回对应的值
     6 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
     7 print(dic.pop('name1',None))#>>>None   None位置可以输入任意值
     8 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球'}
     9 #clear() 清空字典
    10 dic.clear()
    11 print(dic)#>>>{}
    12 #del() 内存级别删除
    13 del dic
    14 print(dic)#打印时会报错,因为在内存级别已经删除
    15 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    16 del dic['age']
    17 print(dic)#>>>{'name': 'lucy', 'hobby': '羽毛球'}
    18 #popitem()随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回,在python3.6以后,默认删除最后一个键值对
    19 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    20 print( dic.popitem())#>>>('hobby', '羽毛球')
    21 print(dic)#>>>{'name': 'lucy', 'age': '18'}
    列表的删

    3、改

    1 #'='
    2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    3 dic['name']='Lily'
    4 print(dic)#>>>{'name': 'Lily', 'age': '18', 'hobby': '羽毛球'}
    5 #update() 将dic1覆盖添加dic2中 ,dic1不变
    6 dic1={'name':'lucy','age':'18','hobby':'羽毛球'}
    7 dic2={'name':'Lily','high':170}
    8 dic2.update(dic1)
    9 print(dic2)#>>>{'name': 'lucy', 'high': 170, 'age': '18', 'hobby': '羽毛球'}
    列表的改

    4、查

     1 #直接按照键查找
     2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
     3 print(dic['name'])#>>>lucy
     4 #get() 查不到不会报错,返回None
     5 print(dic.get('name1'))#>>>None
     6 print(dic.get('name1','没有此key'))#>>>没有此key
     7 
     8 #keys()  values()   items()
     9 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    10 #keys()
    11 print(dic.keys())#>>>dict_keys(['name', 'age', 'hobby'])
    12 print(list(dic.keys()))#>>>['name', 'age', 'hobby']
    13 #values()
    14 print(dic.values())#>>>dict_values(['lucy', '18', '羽毛球'])
    15 print(list(dic.values()))#>>>['lucy', '18', '羽毛球']
    16 #items()
    17 print(dic.items())#>>>dict_items([('name', 'lucy'), ('age', '18'), ('hobby', '羽毛球')])
    18 print(list(dic.items()))#>>>[('name', 'lucy'), ('age', '18'), ('hobby', '羽毛球')]
    19 #for循环取值
    20 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    21 for i in dic.keys():
    22     print(i)
    23 for i in dic.values():
    24     print(i)
    25 for i in dic.items():
    26     print(i)
    27 for k,v in dic.items():
    28     print(k,v)
    29 #分别赋值
    30 a,b=1,2
    31 print('a=',a,'b=',b)#>>>a= 1 b= 2
    32 a,b=b,a
    33 print('a=',a,'b=',b)#>>>a= 2 b= 1
    34 a,b,c=['Lily','Lucy','Lucas']
    35 print('a=',a,'b=',b,'c=',c)#>>>a= Lily b= Lucy c= Lucas
    列表的查

    5、公共方法 len()

    1 dic={'name':'lucy','age':'18','hobby':'羽毛球'}
    2 print(len(dic))#>>>3

    6、fromkeys() 创建字典一种,以fromkeys()创建的键值对,如果值是列表的话,多个共用的都是一个列表

    1 dic={}
    2 dic1=dic.fromkeys('abc','张三')
    3 print(dic1)#>>>{'a': '张三', 'b': '张三', 'c': '张三'}
    4 dic2=dic.fromkeys([1,2,3],'李四')
    5 print(dic2)#>>>{1: '李四', 2: '李四', 3: '李四'}
    6 dic3=dic.fromkeys('abc',[])
    7 dic3['a'].append('张三')
    8 print(dic3)#>>>{'a': ['张三'], 'b': ['张三'], 'c': ['张三']}

    7、字典的嵌套

     1 dic = {
     2     'name_list':['b哥', '张帝', '人帅', 'kitty'],
     3     '老男孩':{
     4         'name':'老男孩',
     5         'age': 46,
     6         'sex': 'ladyboy',
     7     }
     8 }
     9 #1、['b哥', '张帝', '人帅', 'kitty']追加一个骑兵
    10 dic['name_list'].append('骑兵')
    11 print(dic)
    12 #2、将kitty全部变成大写
    13 dic['name_list'][-1]=dic['name_list'][-1].upper()
    14 print(dic)
    15 #3、将'name':'老男孩',老男孩改成oldboy
    16 dic['老男孩']['name']='oldboy'
    17 print(dic)
    18 #4、将ladyboy首字母大写
    19 dic['老男孩']['sex']=dic['老男孩']['sex'].capitalize()
    20 print(dic)

     六、元组

    python的元组与列表类型,不同之处在于元组的元素不能修改(增删改)。
    元组使用小括号(),列表使用方括号[]。
    元组创建很简单,只需要在括号里添加元素,并使用逗号隔开即可。

     1 tu=(11,2,True,[2,3,4],'alex')
     2 #循环查询
     3 # for i in tu:
     4 #     print(i)
     5 #切片查询
     6 print(tu[1])#>>>2
     7 print(tu[:3:2])#>>>(11, True)
     8 #index() 通过元素找索引 count() 元素出现的个数   len() 元素的个数
     9 print(tu.index(True))#>>>2
    10 print(tu.count(2))#>>>1
    11 print(len(tu))#>>>5
    12 #元素里面的元素可以修改
    13 tu[-2].append('a')
    14 print(tu)#(11, 2, True, [2, 3, 4, 'a'], 'alex')
    元组的查

     七、集合

    集合:无序不重复的数据类型。它里面的元素必须是可哈希的,但是集合本身是不可哈希的。

    1、关系测试,交集,并集,子集,差集

    2、去重(列表的去重)

    1 set1={1,'alex',False,(1,2,3)}
    2 l1=[1,1,2,2,3,3,4,5,6,6]
    3 l2=(list(set(l1)))
    4 print(l2)#>>>[1, 2, 3, 4, 5, 6]

    1、增删改查

    1#集合的增无序2set1={'Lily','Lucy'}3set1.add('Lucas')4print(set1)#>>>{'Lucas','Lily','Lucy'}5#跌带着增加update()6set1={'Lily','Lucy'}7set1.update('Lucas')8print(set1)#>>>{'a','Lily','u','c','L','s','Lucy'}9#集合的删10#remove()按照元素删除11set1={'Lily','Lucy'}12set1.remove('Lucy')13print(set1)#>>>{'Lily'}14#pop()随机删除一个元素15set1={'Lily','Lucy'}16set1.pop()17print(set1)#>>>{'Lucy'}18#clear()清空集合19set1={'Lily','Lucy'}20set1.clear()21print(set1)#>>>set()22#del()内存级别删除集合23set1={'Lily','Lucy'}24delset125print(set1)#报错
    集合的增删改查

    2、集合其他操作

    1)交集

    1 set1={1,2,3,4,5}
    2 set2={4,5,6,7,8}
    3 print(set1 & set2 )#>>>{4, 5}
    4 print(set1.intersection(set2))#>>>{4, 5}

    2)并集

    1 set1={1,2,3,4,5}
    2 set2={4,5,6,7,8}
    3 print(set1 | set2)#>>>{1, 2, 3, 4, 5, 6, 7, 8}
    4 print(set1.union(set2))#>>>{1, 2, 3, 4, 5, 6, 7, 8}

    3)差集

    1 set1={1,2,3,4,5}
    2 set2={4,5,6,7,8}
    3 print(set1 - set2)#>>>{1, 2, 3}
    4 print(set1.difference(set2))#>>>{1, 2, 3}

    4)反交集

    1 set1={1,2,3,4,5}
    2 set2={4,5,6,7,8}
    3 print(set1 ^ set2 )#>>>{1, 2, 3, 6, 7, 8}
    4 print(set1.symmetric_difference(set2))#>>>{1, 2, 3, 6, 7, 8}

    5)子集

    1 set1={1,2,3}
    2 set2={1,2,3,4,5,6}
    3 print(set1 < set2)#>>>True
    4 print(set1.issubset(set2))#>>>True

    6)超集

    1 set1={1,2,3}
    2 set2={1,2,3,4,5,6}
    3 print(set2 > set1)#>>>True
    4 print(set2.issuperset(set1))#>>>True

    7)frozenset不可变集合,让集合变成不可变类型

    1 s=frozenset('abc')
    2 s1=frozenset({4,5,6,7,8})
    3 print(s,type(s))#>>>frozenset({'c', 'b', 'a'}) <class 'frozenset'>
    4 print(s1,type(s1))#>>>frozenset({4, 5, 6, 7, 8}) <class 'frozenset'>

     八、数据类型的补充

     1 #range  可定制的数字列表  顾头不顾尾  一般与for()循环一起使用
     2 for i in range(10):
     3     print(i)#输出1到9
     4 #加步长
     5 for i in range(1,10,2):
     6     print(i)#输出1,3,5,7,9
     7 for i in range(10,1,-1):
     8     print(i)#输出10到2
     9 print(range(10))#>>>range(0, 10)
    10 
    11 #切片删除
    12 l1=['Lily','Lucy','Lucas','Amy']
    13 del l1[1::2]
    14 print(l1)#>>>['Lily', 'Lucas']
    15 
    16 #循环删除  在循环一个列表时,不要对列表进行删除的动作(改变列表元素的个数动作),会出错
    17 #从后往前删除
    18 l1=['Lily','Lucy','Lucas','Amy']
    19 for i in range(len(l1)-1,-1,-1):
    20     if i % 2 == 1:
    21         del l1[i]
    22 print(l1)#>>>['Lily', 'Lucas']
    23 
    24 #dic{} 在循环字典时,不要对字典的进行删除和增加
    25 dic={'k1':'v1','k2':'v2','k3':'v3','a1':'b1'}
    26 l1=[]
    27 for i in dic:
    28     if 'k' in i:
    29         l1.append(i)
    30 for i in l1:
    31     del dic[i]
    32 print(dic)#>>>{'a1': 'b1'}
    33 
    34 #tu元组  如果元组里面只有一个元素并且没有逗号隔开,name他的数据类型与该元素一致
    35 tu1=(1)
    36 print(tu1,type(tu1))#>>>1 <class 'int'>
    37 tu2=('Lucy')
    38 print(tu2,type(tu2))#>>>Lucy <class 'str'>
    39 tu3=(['alex',1,2])
    40 print(tu3,type(tu3))#>>>['alex', 1, 2] <class 'list'>

     九、深浅copy

    1,先看赋值运算。

    复制代码
    l1 = [1,2,3,['barry','alex']]
    l2 = l1
    
    l1[0] = 111
    print(l1)  # [111, 2, 3, ['barry', 'alex']]
    print(l2)  # [111, 2, 3, ['barry', 'alex']]
    
    l1[3][0] = 'wusir'
    print(l1)  # [111, 2, 3, ['wusir', 'alex']]
    print(l2)  # [111, 2, 3, ['wusir', 'alex']]
    复制代码

    对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

    2,浅拷贝copy。

    复制代码
    l1 = [1,2,3,['barry','alex']]
    
    l2 = l1.copy() print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
    l1[1] = 222
    print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
    print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
     
    l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016 print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
    复制代码

    对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    3,深拷贝deepcopy。

    复制代码
    import copy
    l1 = [1,2,3,['barry','alex']]
    l2 = copy.deepcopy(l1)
    
    print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
    
    l1[1] = 222
    print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
    
    l1[3][0] = 'wusir'
    print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
    print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304
    复制代码

    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

  • 相关阅读:
    CString与 char *之间的转换
    linux命令行打开图片
    CentOS7 NFS配置
    vs2010 Visula C++ 把CString 转换为string 类型
    1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    mount 命令
    Centos7.0 Vmware10.0.3 网络桥接配置
    Notepad++ 连接远程 FTP 进行文件编辑
    安装PHP的mongodb驱动速记
    CentOS上安装MongoDB速记
  • 原文地址:https://www.cnblogs.com/xingye-mdd/p/8763847.html
Copyright © 2020-2023  润新知