python02篇
作者:互联网
一、字典
1.1 字典的常用方法
# 字典 数据类型 {} key-value # list是挨个循环查找,字典是根据key查找value,比list遍历效率高 d = { 'username': 'xiaohei', 'id': 1, 'grade': 'tmz', 'addr': '北京', 'age': 18 } d2 = {} # 定义一个空字典 # 增加元素 d['money'] = 500 # 新增并修改 d.setdefault('car', 'bmw') d.setdefault('money', 600) # 如果key已经存在,使用此方法不能修改value # 修改元素 d[key] = value #取值 print(d) print(d['money']) print(d.get('username')) print(d.get('aaa')) # get方法 如果不存在的key,返回none print(d.get('sex', '男')) # get方法 如果不存在的key,可以取一个默认值 # print(d['aaa']) # []方法,如果key不存在,报 KeyError: 'aaa' # 删除 d.pop('grade') # d.pop('aaa') # 如果key 不存在,报 KeyError: 'aaa' # del d['aaa'] # 如果key 不存在,报 KeyError: 'aaa' # 其他方法 print(d.values()) # 取出所有的value 放在list print(d.keys()) # 取出所有的key 放在list中 d.update(a=1, b=2) # 往字典中增加新元素 #d.clear() # 清空字典 print(d) users = { 'xiaohei': '123123', 'xiaobai': 'abc123' } username = 'xiaohei' print(username in users.keys()) # 这一种不推荐,因为要先把key都取出来放到list中,性能没有下面那一种方法好 print(username in users) # 判断这个key是否存在字典中 # users.has_key(username) # python2中的用法 # 遍历字典 这种方法只能拿到字典中的key for i in d: print(i) print(d.items()) # 此方法把字典转换成二维数组返回 # dict_items([('username', 'xiaohei'), ('id', 1), ('addr', '北京'), ('age', 18), ('money', 500), ('car', 'bmw'), ('a', 1), ('b', 2)]) for k, v in d.items(): # 因为items方法返回的是二维数组,所以可以通过拆包 获取key、value print(k, v) # 下面这种方法,不需要通过items转为数组,通过key遍历字典,通过key获取对应的value。如果数据量大,推荐使用这种方法 for k in d: print(k, d.get(k))
1.2 字典练习
''' 1、注册 1、输入账号和密码、确认密码 2、要校验账号是否存在(从字典里面判断),存在的话,不能注册 3、校验两次输入的密码是否一致,如果一致,加入到字典中,提示注册成功 4、最多3次 5、要校验输入是否为空,为空也算一次错误,全是空格也算空 ''' users = { 'xiaohei': '123123', 'xiaobai': 'abc123' } for i in range(3): username = input('username:').strip() password = input('password:').strip() cpwd = input('pwd:').strip() if not username or not password or not cpwd: print('账号/密码/确认密码不能为空') continue elif password != cpwd: print('两次输入的密码不一致') continue elif username in users: print('账号已存在') continue else: print('恭喜你注册成功') users[username] = password break else: print('错误次数超限!')
二、元组
# 定义元组 t = (1, 2, 3, 4, 5, 2, 4, 2) # 不可变的列表 t1 = () # 定义空元组 t2 = ('abc') # 此时不是定义的元组,而是str t3 = ('bc',) # 只有一个元素时,要加上英文逗号 , # 元组一旦被创建,不能改变里面的值 # t[0] = 6 # 修改元组的元素的值报错,TypeError: 'tuple' object does not support item assignment print(t.index(2)) # 获取元素的下标 print(t.count(2)) # 获取某个元素出现的次数
三、其他小tips
3.1 切片
import string print(string.ascii_lowercase) # 把26个小写字母作为一个字符串返回 print(string.ascii_uppercase) # 把26个大写字母作为一个字符串返回 print(string.ascii_letters) # 把26个小写和26个大写字母作为一个字符串返回 print(string.punctuation) # 把所有特殊字符作为一个字符串返回 print(string.digits) # 把10个数字(0~9)作为一个字符串返回 l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'] # 切片的时候是顾头不顾尾 # -9 -8 -7 -6 -5 -4 -3 -2 -1 print(l[0:3]) # 从第一个元素取到第3个元素,此时0可以忽略不写,l[:3] print(l[2:-1]) # 从第3个元素到倒数第2个元素 print(l[2:]) # 后面的结尾不写,代表取到最后一个元素 print(l[0:9:1]) # 从第1个元素到第9个,步长为1,即隔1个取一次。步长不写默认为1 print(l[0:8:3]) # # 从第1个元素到第8个,步长为1,即隔几个取一次。步长不写默认为1 print(l[::-1]) # 如果步长是负数的话,那么取值的时候就从右往左开始取,同时下标也要用负数 print(l[-1:-4:-1]) # 字符串也可使用切片 str1 = 'abcdefghijklmnopqrstuvwxyz' print(str1[2:15:3]) # 元组也可以使用切片 t = (1, 2, 3, 4, 5, 2, 4, 2) t2 = t[1:5:2] print(t2)
3.2 深拷贝、浅拷贝
import copy # 例子1: l = [0, 1, 2,2, 3, 4, 5, 6, 7, 8, 9] for i in l: if i % 2 == 0: l.remove(i) print(l) # 执行结果:[1, 2, 3, 5, 7, 9],在删除的过程中,下标变化了,有些元素被跳过 # 要进行删除list中的元素时,使用两个相同的list进行 # l = [0, 1, 2,2, 3, 4, 5, 6, 7, 8, 9] l2 = [0, 1, 2,2, 3, 4, 5, 6, 7, 8, 9] # l2 = l # l和l2 指向同一内存地址。浅拷贝 for i in l2: if i % 2 == 0: l.remove(i) print(l) print(id(l)) # 查看内存地址 print(id(l2)) # 深拷贝和浅拷贝 l3 = copy.deepcopy(l) # 只有这一种深拷贝 重新开辟了内存空间。如果复制了一个变量,这两个变量其中一个变了之后,不应该影响另一个 print(id(l3)) # 列子2,如果有嵌套的话,list本身的copy方法以及切片也是浅拷贝 l = [1, 2, 3, 4, [5, 6, 7]] l2 = l.copy() # 浅拷贝,有嵌套的会受影响 l3 = l[:] # 浅拷贝,有嵌套的会受影响 l[-1].append('aaf') print(l) print(l2) print(l3)
3.3 简化代码(非空即真,非0即真)
# 非空即真 ,非0即真 简化代码 # None {} [] () '' 为假,False s = '' # False l = [] # False l1 = [''] # True d = {'': ''} # True d1 = {} # False t = ('',) # True t1 = () # False num1 = 0 # False num2 = 1 # True username = input('username:') if username.strip(): # 等同于 if username.strip() != '': print('你输入的不为空',username) else: print('username不能为空') # 如果想要先判断为空的情况 if not username.strip(): # 等同于 if username.strip() == '': print('username不能为空') else: print('你输入的不为空', username) # 非0即真 d = {'a': 1, 'b': 2, 'c': 0} if d.get('c'): print('取到值') # 此时会有bug else: print('其他操作')
标签:username,元素,list,python02,key,print,字典 来源: https://www.cnblogs.com/lhy-qingqiu/p/13546017.html