数据类型
(一)概述
本篇文章主要对基础的数据类型继续进行介绍,介绍主要分以下几个部分:
- 格式化输出
- 初识运算符
- 编码的初识
- 基础数据类型之int、bool
- 基础数据类型之str
- for循环
- 基础数据类型之list
- 基础数据类型之tuple
- 基础数据类型之dic
- 基础数据类型之可能遇到的坑
(二)内容详解
1.格式化输出
- 格式化输出的形式:%+数据类型
- 数据类型包括 s:字符串 d:整数 f:浮点型 r:内置函数
- 格式化输出的三种形式:
- 形式1:采用手动输入的方式进行格式化输出
-
name = input('请输入你的姓名:') age = input('请输入你的年龄:') job = input('请输入你的工作:') hobbly = input('请输入你的爱好:') msg = ''' ----------info of %s------------ Name:%s Age:%d Job:%s Hobbly:%s -----------end------------------ ''' % (name, name, int(age), job, hobbly) print(msg)
- 形式2:通过字典自动匹配输出,可以只选择字典中的部分进行输出
-
dic = {'name': '马玉刚', 'age': 31, 'job': 'IT', 'hobbly': '篮球', 'sex': '男'} msg = ''' ------------info of %(name)s------------- Name:%(name)s Job:%(job)s Hobbly:%(hobbly)s Age:%(age)s --------------end-------------------------- ''' % dic #%dic 不能忘记,此处是通过key与字典进行关联。 print(msg)
- 形式3:通过format进行格式化输出
-
res = '{} {} {}'.format('egon', 18, 'male') print(res) res = '{1} {2} {1}'.format('egon', 18, 'male') # 根据指定的索引进行格式化输出 print(res) res = '{name} {age} {sex}'.format(sex='male', name='egon', age=18) print(res)
- 注意:在格式化输出时,如果只是单纯的表示%,要写成%%。
-
msg = '我叫%s,今年%d,学习进度为5%%' % ('马玉刚', 31) print(msg)
2.初识运算符
- 运算符的分类包括算数运算符、比较运算符、逻辑运算符、成员运算符等。
-
# -*- encoding:utf-8 -*- '''算数运算:+ - * / % ** //''' # a = 10 # b = 3 # print(a % b) # 求a除以b的余数,通常用于除以2来判断数字的奇偶性 # print(a ** b) # a的b次幂 # print(a // b) # a除以b的商 '''比较运算:== != > < >= <=''' # 比较运算输出的是bool值 # print(3 != 2) # True '''逻辑运算 not and or''' #优先级顺序,从高到低:()not and or #同一优先级,从左到右依次执行 # 1、逻辑运算两边都是比较:根据优先级进行计算,输出的值为bool值。 print(3 > 2 and 3 < 4 or 5 > 6 and 2 < 5) # True print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) # False print(True or False) # True # 2、逻辑运算两边都是数字 x or y,if x is True,return x,else retuen y. x and y,if x is True,return y,else return x. print(1 or 3) # 1 print(100 or 3) # 100 print(-10 or 3) # -10 print(0 or 3) # 3 print(1 and 3 or 4) # 3 print(0 and 3 or 5) # 5 #补充 int<->bool间的转换 int---->bool:非0即True print(bool(100)) # True bool--->int True 1,False 0 print(int(True)) # 1 print(int(False)) # 0 # 3、逻辑运算两边是数字或者是比较 print(1 and 4 < 6 or 5) # True # 逻辑运算符优先于比较运算符 '''成员运算:判断某些元素在不在一个序列中 str tuple list dict set''' in not in s1 = 'ab' s11 = 'ak' s2 = 'abkcdcekengeh' print(s1 in s2) # True print(s11 in s2) # False #示例:作业题会应用到一下示例,即用户输入一个内容,判断输入的内容是否在序列中。 content = input('请输入你需要购买的商品:') s1 = {'01':'苹果手机','02':'小米耳机','03':'三星手机'} if content in s1.keys(): print('恭喜您,您购买的货品充足') else: print('抱歉,您购买的货物不存在,请您重新输入,谢谢!')
3.编码的初识
- 目前,公认的有4种编码方式即ASCII编码、Unincode编码、UTF-8编码、GBK编码。
-
01 ASCII编码方式:美国根据美国的26个字符和其他字符的需求定义的一套编码方式,只能表示256个字符,其中一个字符用一个字节表示。 8bit == 1bytes bit - 位 bytes - 字节 0000 0001 共计256种可能,代表256个不同的字符。 举例:ABC用ASCII编码方式如下: A - 01000001 B - 01000010 C - 01000011 所以ABC的编码输出为:010000010100001001000011 'hello':5个字节。 缺点:代表的字符有限,无法涵盖其他国家的字符。 02 Unicode编码方式:又称万国码,将世界所有国家的文字都涵盖。 起初;16位,即两个字节表示一个字符。举例如下(示意): a: 01000001 01000001 中:01000101 01000001 升级:32位,即用4个字节表示一个字符。举例如下(示意): a: 01000001 01000001 01000101 01000001 中:01000101 01000001 01000101 01000001 缺点:浪费资源和空间。 03 Utf-8编码方式:最少用8位,即一个字节表示一个字符,根据每个国家的字符的实际个数用不同的字节数显示,举例如下(示意): a:01000001 (一个字节) 欧洲文字:01000001 01000001 (两个字节) 亚洲 中:01000001 01000001 01000001 (三个字节) 说明:由于节省资源和空间,所以,通常在编码的时候采用utf-8的编码方式进行编码。 04 GBK的编码方式:即国标,只包含ASCII编码和中文,举例如下(示意): a:01000001 (一个字节) 中:01000001 01000001 (两个字节)
- 单位转换公式
-
8bit == 1bytes 1024bytes == 1kb 1024kb == 1MB 1024MB == 1GB 1024GB == 1TB 1024TB == 1PB
4.基础数据类型之int、bool
-
'''01 int''' # bit_length():计算10进制转化成为二进制的有效位数 i = 10 i1 = 6 print(i.bit_length(), i1.bit_length()) '''示例如下: 十进制 二进制 1 0000 0001 3 0000 0011 6 0000 0110 ''' '''02 bool''' # str--->bool:非空即True s1 = 'Alex' s2 = ' ' s3 = '' print(bool(s1)) # True print(bool(s2)) # True print(bool(s3)) # False
5.基础数据类型之str
- 字符串数据类型主要是切片、索引以及15种有关字符串运算的方法
-
# -*- encoding:utf-8 -*- '''索引''' s = 'python24期' # 索引:字符串中每个字符都有一个索引,索引从左至右计数,并且从0开始计数。 s1 = s[0] print(s1, type(s1)) # p <class 'str'> print(s, s1) # python24期 p s2 = s[8] s3 = s[-1] # 索引为‘-1’指的是字符串的最后一个字符的索引。 print(s2) # 期 print(s3) # 期 # 结论:对字符串操作都会形成新的字符串,与原来的字符串无关 '''切片''' # 切片的原则:顾头不顾尾,即相当于输出的切片实际长度为'结束索引-1' # 切片方法:s[起始索引:'结束索引+1':步长],如果结束索引为"-1",则方法中的加1变成减1,即从左往右数'+1',从右往左数'-1'. # 省略说明:起始索引可以省略,默认为0;步长可以省略,默认为1;起始索引、结束索引和步长都可以省略,直接打印整个字符串。 s = 'python24期' print(s[:2]) # py print(s[:]) # python24期 print(s[:6:2]) # pto print(s[-1:-4:-1]) # 期42,如果是从右往左,一定要加上步长,并且步长是负数,比如'-1' '''字符串常用的方法''' # 方法1:capitalize() 首字母大写,其他字母小写 * s = 'oldBoy' print(s.capitalize()) # Oldboy # 方法2:swapcase() 大小写反转 * s = 'oldBoy' print(s.swapcase()) # OLDbOY # 方法3:center 居中 设置宽度 * s = 'oldBoy' print(s.center(20, '-')) # 20是指整个输出字符的长度,'-'用于填充空白区域。 # 方法4:title() 非字母隔开的'单词'首字母大写 * s = 'alex wusir2taibai*ritian' print(s.title()) # Alex Wusir2Taibai*Ritian # 方法5:upper() 全大写 ** s = 'oldBoy' print(s.upper()) # OLDBOY # 方法6:lower() 全小写 ** s = 'oldBoy' print(s.lower()) # oldboy '''举例:通过校验验证码进行模拟验证登录''' usrname = input('请输入用户名:') password = int(input('请输入密码:')) # 如果密码定义的数字,需要进行一下字符串与数字的转换,因为input的输入的字符串类型 your_code = input('请输入正确的验证码:') code = 'abcdeFgh' if usrname == '马玉刚' and password == 123456: if your_code.upper() == code.upper(): print('登录成功') username = input('请输入账号:') password = input('请输入密码:') code = 'QerAg'.upper() your_code = input('请输入验证码:').upper() # QERAG,Qerag..... if username == 'alex' and password == 'SB': if your_code == code: print('登录成功') # 方法7:startswith() 判断以什么开头 ** s = 'oldBoy' print(s.startswith('o')) # True print(s.startswith('old')) # True # 方法8:endswith() 判断以什么结尾 ** s = 'oldBoy' print(s.endswith('B')) # False print(s.endswith('y')) # True print(s.endswith('B',0,4)) # 索引0-4进行切片,切片后进行判断。 # 方法9:strip() 默认去除str前后两端换行符(\n),制表符(\t)-相当于tab,空格。*** s = ' \noldBoy\t' print(s.strip()) # oldBoy print(s.lstrip()) # 只去除左边的空格 print(s.rsplit()) # 只去除右边的制表符 '''strip()方法示例:由于在输入用户名和密码有时会带有换行符和制表符,所以在登录验证的时候利用该方法可以自动去除换行符合制表符''' usrname = input('请输入用户名:').strip() password = input('请输入密码:').strip() if usrname == '马玉刚'and password == '123456': print('恭喜你,登录成功!') # 方法10:split() 将str转换为list,默认是按照空格进行分割,也可以进行指定分割符号 *** s = 'alex wusir barry' s1 = 'alex,wusir,barry' s2 = ',alex,wusir,barry,' print(s.split()) print(s1.split(',')) # 指定分割符号为',',实际分割的个数:“字符串中分割符号总数+1” #['alex', 'wusir', 'barry'] print(s2.split(',')) # 指定分割符号为',',实际分割的个数:“字符串中分割符号总数+1” #['', 'alex', 'wusir', 'barry', ''] print(s2.split(',')) # 指定分割符号为',',实际分割的个数:“字符串中分割符号总数+1” #['', 'alex', 'wusir', 'barry', ''] # 方法11:join:将字符串中的字符间用指定的字符进行两两连接,用途之一是将list转换为str *** s = 'oldBoy' print('_'.join(s)) print('Alex'.join(s)) list-->str:将list转换为str l1 = ['alex', 'wusir', 'barry'] s = ''.join(l1) s1 = ' '.join(l1) print(s) # alexwusirbarry print(s1) # alex wusir barry # 方法12: replace:将字符串中的某个元素进行替换,如果不指定次数替换字符串中所有的该元素,如果指定次数,则按照指定次数进行替换*** s = 'alex,alex, wusir, barry' print(s.replace('alex', '太白')) # 太白,太白, wusir, barry print(s.replace('alex', '太白', 1)) # 太白,alex, wusir, barry # 方法13:is 系列 *** age = '31' print(age.isalnum()) #字符串由字母或数字组成 print(age.isalpha()) #字符串只由字母组成 print(age.isdigit()) #字符串只由数字组成 str ---> int 可以作为一个判断条件 *** # 方法14:find:通过元素找索引,找不到返回为 -1 *** s = 'oldBoy' print(s.find('d')) # 2 print(s.find('A')) # 可切片 -1 # 方法15:index:通过元素找索引,找不到报错 *** s = 'oldBoy' print(s.index('d')) # 2 print(s.inedex('A')) # 报错 # 公共方法 *** # len:统计元素的总个数 s = 'fjsdaklfjsdklafjsadf' print(len(s)) # count:测试某个元素出现的个数 s = 'fjsdaklfjsdklafjsadf' print(s.count('s'))
6.for循环
-
# 形式:for 变量 in iterable: # 输出:输出的元素个数为字符串s的个数。 # 说明:只要循环被break打断,则不执行else程序。 s = 'fdksj' for i in s: print(i+'Alex') # 依次与'Alex拼接'之后打印输出,输出的元素个数为字符串s的个数 #只要循环被break打断,则不执行else程序,否则循环执行完成后,执行else语句。 s = 'fdksj' for i in s: print(i) if i == 'f': break else: print(666)
7.基础数据类型之list
-
# -*- encoding:utf-8 -*- '''列表的说明: 01 list可以存储各种数据类型,同时支持存储大量的数据。# li = ['alex', 123, True, (1, 2, 3, 'wusir'), [1, 2, 3, '小明', ], {'name': 'alex'}] 02 list是有序的,有索引值,可切片,便于取值。 ''' '''01 索引的的切片(与字符串完全一样)''' l1 = ['alex', 'wusir', '太白', 100, '女神'] print(l1[0], type(l1[0])) # alex <class 'str'> print(l1[-2], type(l1[-2])) # 100 <class 'int'> print(l1[:2]) # ['alex', 'wusir'] '''02 列表的新增:增加有3种方式,即append insert extend''' # append 追加:直接在列表的最后面添加新增的元素即可 l1 = ['alex', 'wusir', 'wusir', 'wusir','太白', 100, '女神'] print(l1.append('文刚')) # 追加过程无输出 print(l1) # ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神', '文刚'] # insert 插入:根据指定的索引进行插入 l1 = ['alex', 'wusir', 'wusir', 'wusir','太白', 100, '女神'] l1.insert(1, 'oldBoy') # 1是指列表的索引 print(l1) # extend 迭代的追加: l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1.extend('abd') print(l1) # ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神', 'a', 'b', 'd'] l2 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l2.extend(['abc', 'erf']) print(l2) # ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神', 'abc', 'erf'] '''03 删除的4种方法:即pop remove clear del''' pop:根据指定的索引进行删除。 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] ret = l1.pop(1) print(ret) # wusir print(l1) # ['alex', 'wusir', 'wusir', '太白', 100, '女神'] # remove:根据指定的元素值进行删除 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1.remove(100) print(l1) # ['alex', 'wusir', 'wusir', 'wusir', '太白', '女神'] #clear:直接清空整个列表 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1.clear() print(l1) # [] # del:根据索引、切片(步长)两种方式进行删除 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] del l1[0] print(l1) # ['wusir', 'wusir', 'wusir', '太白', 100, '女神'] l2 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] del l2[::2] print(l2) # ['wusir', 'wusir', 100] '''04 列表修改的2种方法:即按照索引直接修改、按照切片直接修改''' # 直接按照索引进行替换 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1[1] = 'SB' print(l1) # ['alex', 'SB', 'wusir', 'wusir', '太白', 100, '女神'] # 直接按照切片进行修改 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1[:2] = 'abcdcegef' print(l1) # ['a', 'b', 'c', 'd', 'c', 'e', 'g', 'e', 'f', 'wusir', 'wusir', '太白', 100, '女神'] # 加上步长一定要一一对应。 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1[::2] = 'abcd' # 由于需要替换4个,所以,如果将abcd修改为abc会报错。 print(l1) # ['a', 'wusir', 'b', 'wusir', 'c', 100, 'd'] '''05 列表的查询:根据索引、切片、切片(步长)进行查询''' # 通过for循环,将列表中的所有元素按照列进行展示 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] for i in l1: print(i) # 按照列的方式,展示每个元素。 通过索引进行查询 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] print(l1[5]) # 100 通过切片进行查询(顾头不顾尾) l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] print(l1[:5]) # ['alex', 'wusir', 'wusir', 'wusir', '太白'] 通过切片(步长)的方式进行查询 l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] print(l1[0:6:3]) # ['alex', 'wusir'] '''06 index:通过元素查询索引''' l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] print(l1.index('alex')) # 0 print(l1.index('wusir')) # 1 针对多个相同元素的列表,通过index查询索引时,只要查询到一个即停止查询,并将索引值返回。 '''07 sort:从小到大排序:通常只是针对整形的列表使用''' l1 = [1, 10, 8, 6, 9, 2, 5, 4, 3] l1.sort() # 对l1进行从小到大排序 print(l1) # [1, 2, 3, 4, 5, 6, 8, 9, 10] l1.sort(reverse = True) # 对l1进行从大到小的排序 print(l1) # [10, 9, 8, 6, 5, 4, 3, 2, 1] '''08 reverse:将列表顺序反转''' l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] l1.reverse() print(l1) # ['女神', 100, '太白', 'wusir', 'wusir', 'wusir', 'alex'] '''09 len:统计列表的长度''' l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] print(len(l1)) # 7 '''10 count:统计列表中某个元素的个数''' l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神'] print(l1.count('wusir')) # 3 '''11 列表的嵌套:对列表中嵌套的列表、字典等进行操作''' # 将列表中的'wusir'全部大写 l1 = ['alex', 'wusir', [1, 'taibai']] l1[1] = l1[1].upper() print(l1) # ['alex', 'WUSIR', [1, 'taibai']] # 将列表中的'taibai'的首字母大写 l1 = ['alex', 'wusir', [1, 'taibai']] l1[2][1] = l1[2][1].capitalize() print(l1) # ['alex', 'wusir', [1, 'Taibai']] '''12 range的使用:range可以看做自定义的数字范围列表,一般都是与for循环结合,也遵循"顾头不顾尾"的原则。''' for i in range (1,10): print(i) for i in range(1,20,2): print(i) for i in range(20, 1, -1): print(i) # 利用for循环打印出列表的索引 l1 = ['alex', 'wusir', 'wusir', 100, '女神'] for i in l1: print(l1.index(i)) # 利用for range 打印出列表的索引。 l1 = ['alex', 'wusir', 'wusir', 100, '女神'] print(len(l1)) for i in range(len(l1)): print(i)
8.基础数据类型之tuple
-
''' 01 元组是只读列表。 02 可以索引,可以切片(步长)。 03 不能增删改(儿子不能,孙子有可能),只能查询。 04 index, count, for 循环。 ''' # 根据索引进行查询 tu = (1, True, [12, 3], 'afdlsfa') print(tu[2]) # [12, 3] # 根据切片(步长)进行查询 tu = (1, True, [12, 3], 'afdlsfa') print(tu[::2]) # (1, [12, 3]) # len:查询元祖的元素个数 tu = (1, True, [12, 3], 'afdlsfa') print(len(tu)) # 4 # count:查询元祖中某个元素的个数 tu = (0, False, True, [12, 3], 'afdlsfa') print(tu.count(True)) # 1 # for循环打印元祖的所有元素 tu = (0, False, True, [12, 3], 'afdlsfa') for i in tu: print(i) # for和range配合打印出元祖的所有索引。 tu = (0, False, True, [12, 3], 'afdlsfa') for i in range(len(tu)): print(i) # index:根据索引查询元祖中的索引 tu = (0, False, True, [12, 3], 'afdlsfa') print(tu.index([12, 3]))
9.基础数据类型之dic
-
'''字典整体说明: 01 键值对出现,即key:value。 02 key是唯一的不能重复的。 03 可以存储大量的关系型数据。 04 字典的3.5以及3.5以下的版本中元素是无序的,3.6之后字典是有序的,但是没有索引,只是依据字典建立的顺序进行有序存储。 05 字典的key:int str bool tuple ,其中bool和tuple不常用。 06 字典的key是不可变的数据类型(可哈希)。 07 字典的value:可以是任意数据类型。 ''' '''01 字典的新增''' # 按照键值对增加,有则改之,无则增加 dic = {'name': 'TaiBai', 'age': 25, 'sex': '男',} dic['job'] = 'IT' print(dic) dic['name'] = '马玉刚' print(dic) # setdefault:无则添加,有则不变 dic = {'name': 'TaiBai', 'age': 25, 'sex': '男'} dic.setdefault('job') print(dic) # 无则增加 {'name': 'TaiBai', 'age': 25, 'sex': '男', 'job': None} dic.setdefault('job', 'IT') # 有则不变 {'name': 'TaiBai', 'age': 25, 'sex': '男', 'job': None} print(dic) dic1 = {'name': 'TaiBai', 'age': 25, 'sex': '男'} dic1.setdefault('job', 'IT') print(dic1) # {'name': 'TaiBai', 'age': 25, 'sex': '男', 'job': 'IT'} '''02 字典的删除 ''' # pop:按照key进行删除。 dic = {'name': 'TaiBai', 'age': 25, 'sex': '男'} ret = dic.pop('name') print(ret) # 返回的是删除的值 TaiBai print(dic) # {'age': 25, 'sex': '男'} # clear:清空整个字典表。 dic = {'name': 'TaiBai', 'age': 25, 'sex': '男'} dic.clear() print(dic) # {} # del:按照key进行删除。 dic = {'name': 'TaiBai', 'age': 25, 'sex': '男'} del dic['name'] print(dic) # {'age': 25, 'sex': '男'} '''03 字典的改''' # 按照key直接修改 dic = {'name': 'TaiBai', 'age': 25, 'sex': '男'} dic['name'] = '马玉刚' print(dic) # {'name': '马玉刚', 'age': 25, 'sex': '男'} # update:无则添加,有则更新 dic = {"name": "jin", "age": 18, "sex": "male"} dic2 = {"name": "alex", "weight": 75} dic2.update(dic) # 将dic 的所有键值对覆盖并添加到dic2中。dic不变。 print(dic) # {'name': 'jin', 'age': 18, 'sex': 'male'} print(dic2) # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'} '''04 字典的查询''' # 按照key进行查询 dic = {"name": "jin", "age": 18, "sex": "male"} print(dic['name']) # jin print(dic['name1']) # 报错 # get:根据关键字进行查询 dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.get('name')) # jin print(dic.get('name1')) # None print(dic.get('name1', '没有此键')) # 没有此键:如果没有key,返回值可以自定义,默认返回为None '''05 for循环''' dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.keys()) for i in dic.keys(): print(i) print(list(dic.keys())) # ['name', 'age', 'sex'] print(dic.values()) # dict_values(['jin', 18, 'male']) print(dic.items()) # dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')]) a, b, c = 1, 2, 3 a, b, c = [1, 2, 3] print(a, b, c) # 两值互换 a = 10 b = 100 a, b = b, a print(a, b) # 依次打印字典的key和value dic = {"name": "jin", "age": 18, "sex": "male"} for k, v in dic.items(): print(k, v) '''06 dict的嵌套''' dic = {'name': 'alex', 'name_list': ['wusir', 'taibai'], 1: {'name': '日天'}} # 将wusir全部变成大写 print(dic['name_list'][0]) dic['name_list'][0] = dic['name_list'][0].upper() print(dic) # 将日天 改成 泰迪。 dic[1]['name'] = '泰迪' print(dic)
10.基础数据类型之可能遇到的坑
-
'''整体说明: 01 tuple元组中如果只有一个元素没有逗号,则他不是元祖而是该元素对应的类型;有逗号则说明是tuple元祖类型。 02 在 正向 循环一个list中,如果改变的列表的大小,若用for循环,则采用逆向倒序删除的方式进行删除。 03 在循环一个字典时,不能改变该字典的大小,但是在不循环字典的时候可以改变字典的大小。 ''' # 01 tuple元组中如果只有一个元素没有逗号,则他不是元祖而是该元素对应的类型;有逗号则说明是tuple元祖类型。 tu1 = (1) print(tu1, type(tu1)) # print(tu1, type(tu1)) tu2 = ('alex') print(tu2, type(tu2)) # alex <class 'str'> tu3 = ([1, 2, 3]) print(tu3, type(tu3)) # [1, 2, 3] <class 'list'> tu1 = (1,) print(tu1, type(tu1)) # (1,) <class 'tuple'> # fromkeys:将tuple元祖转换为字典 dic = dict.fromkeys('abc', 'alex') print(dic) # {'a': 'alex', 'b': 'alex', 'c': 'alex'} # 02 比较说明 # == 比较的是两边的数值是否相同 # is 比较的是内存地址是否相同 # id 查询的是内存地址 # 在 正向 循环一个list中,如果改变的列表的大小,那么结果可以和你预想的不一样。 # 将索引为奇数位置的元素删除。 # 第一种:按照切片(步长)的方式进行删除。 l1 = [11, 22, 33, 44, 55, 66] del l1[1::2] print(l1) # 将索引为奇数位置的元素删除。 # 第二种:利用for循环进行删除。 #错误删除法:正向循环删除。 l1 = [11, 22, 33, 44, 55, 66] for ind in range(len(l1)): print(ind, l1) if ind % 2 == 1: del l1[ind] print(ind, l1) print(l1) # 正确删除法:逆向倒叙删除 l1 = [11, 22, 33, 44, 55, 66] for ind in range(len(l1)-1, -1, -1): if ind % 2 == 1: del l1[ind] print(l1) # 正确删除法:将原有的列表整体切片后,切片后形成行的列表即可进行循环和删除。******** li = l1[:] for ind in range(len(li)): print(ind, li) if ind % 2 == 1: del l1[ind] print(ind, l1) print(l1) # 在循环一个字典时,不能改变该字典的大小。 # 需求将字典中的key键含有'k'元素的所有键值对删除。 dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'} # 错误示例: for i in dic.keys(): if 'k' in i: del dic[i] print(dic) # 正确解析: l1 = [] # 定义一个空的列表 for key in dic: if 'k' in key: l1.append(key) # 将满足条件的添加至列表中 # print(l1) for key in l1: # 循环列表(列表可循环) del dic[key] # 删除满足条件中的键值对 print(dic)