一、字典

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('其他操作')

python02篇 字典、元组、切片的更多相关文章

  1. Python基础篇 -- 字典

    字典 dict. 以 {} 表示, 每一项用逗号隔开, 内部元素用 key: value的形式来保存数据 例子: dict.{"JJ":"林俊杰"," ...

  2. iOS开发UI篇—字典转模型

    iOS开发UI篇—字典转模型 一.能完成功能的“问题代码” 1.从plist中加载的数据 2.实现的代码 // // LFViewController.m // 03-应用管理 // // Creat ...

  3. 李洪强iOS开发Swift篇—05_元组类型

    李洪强iOS开发Swift篇—05_元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let po ...

  4. python中 列表 字典 元组的了解

    #######列表######1.列表的特性 server = [['http'],['ssh'],['ftp']] server1 = [['mysql'],['firewalld']]  连接  ...

  5. Python【列表 字典 元组】

    列表列表用中括号[ ]把各种数据框起来,每一个数据叫作“元素”.每个元素之间都要用英文逗号隔开各种类型的数据(整数/浮点数/字符串)————————————————————————————从列表提取单 ...

  6. python之字符串,列表,字典,元组,集合内置方法总结

    目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ...

  7. python 字典元组集合字符串

    s1 = ''hello, world!'' s2 = '\n\hello, world!\\n' print(s1, s2, end='') s1 = '\141\142\143\x61\x62\x ...

  8. 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典)--->元组 tuple-->字符串 str

    # ### 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典) # (1)定义一个列表 listvar = [] print(listvar, ...

  9. day4 列表 字典 元组

      元组  不能修改里面的数据       字典是无序的集合  通过键名来访问元素       列表是有有序的  通过下标来访问    可以进行修改       列表  []   是python中使用 ...

随机推荐

  1. Could not get JDBC Connection排查

    最近在维护的一个比较旧的项目,发现总是隔一段时间JDBC就报错: Could not get JDBC Connection; nested exception is org.apache.commo ...

  2. descriptor 'decode' requires a 'bytes' object but received a 'NoneType'

    记录在使用python过程中踩的坑------ 使用xlwt库对excel文件进行保存时报错 descriptor 'decode' requires a 'bytes' object but rec ...

  3. AI人工智能天机芯芯片

    AI人工智能天机芯芯片 描述 2019年刊出的<自然>封面文章,展示了清华大学类脑计算研究中心团队研发的新型人工智能芯片"天机芯(Tianjic)".这是世界首款异构融 ...

  4. NVIDIA 自动驾驶软件平台

    NVIDIA 自动驾驶软件平台 Software Developers using DRIVE AGX Developer Kits may choose between: DRIVE OS 5.2. ...

  5. 向量算子优化Vector Operation Optimization

    向量算子优化Vector Operation Optimization 查看MATLAB命令View MATLAB Command 示例显示Simulink编码器 ,将生成向量的块输出,设置为标量,优 ...

  6. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使 用节点表示抽象的数学计算,并使用 OP 表达计算的逻 ...

  7. Java设计模式(3:接口隔离原则和迪米特法则详解)

    一.接口隔离原则 使用多个接口,而不使用单一的接口,客户端不应该依赖它不需要的接口.尽量的细化接口的职责,降低类的耦合度. 我们先来看一个例子: 小明家附近新开了一家动物园,里面有老虎.鸟儿.长颈鹿. ...

  8. python_selenium 之logging模块入门及调用实战

    一.logging模块是什么? 是Python内置的标准模块,主要用于输出运行日志 二.日志的作用 日志是代码的必要组成部分 记录日志能显示程序当前运行状态 出问题后定位当时问题 三.python日志 ...

  9. 深入理解java虚拟机笔记Chapter8

    运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法 ...

  10. selenium css定位元素

    CSS 选择器: 常见符号: #表示 id选择器 .表示 class选择器 >表示子元素,层级 一个空格也表示子元素,但是是所有的后代子元素,相当于 xpath 中的相对路径 一.css:属性定 ...