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('其他操作')
python02篇 字典、元组、切片的更多相关文章
- Python基础篇 -- 字典
字典 dict. 以 {} 表示, 每一项用逗号隔开, 内部元素用 key: value的形式来保存数据 例子: dict.{"JJ":"林俊杰"," ...
- iOS开发UI篇—字典转模型
iOS开发UI篇—字典转模型 一.能完成功能的“问题代码” 1.从plist中加载的数据 2.实现的代码 // // LFViewController.m // 03-应用管理 // // Creat ...
- 李洪强iOS开发Swift篇—05_元组类型
李洪强iOS开发Swift篇—05_元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let po ...
- python中 列表 字典 元组的了解
#######列表######1.列表的特性 server = [['http'],['ssh'],['ftp']] server1 = [['mysql'],['firewalld']] 连接 ...
- Python【列表 字典 元组】
列表列表用中括号[ ]把各种数据框起来,每一个数据叫作“元素”.每个元素之间都要用英文逗号隔开各种类型的数据(整数/浮点数/字符串)————————————————————————————从列表提取单 ...
- python之字符串,列表,字典,元组,集合内置方法总结
目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ...
- python 字典元组集合字符串
s1 = ''hello, world!'' s2 = '\n\hello, world!\\n' print(s1, s2, end='') s1 = '\141\142\143\x61\x62\x ...
- 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典)--->元组 tuple-->字符串 str
# ### 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典) # (1)定义一个列表 listvar = [] print(listvar, ...
- day4 列表 字典 元组
元组 不能修改里面的数据 字典是无序的集合 通过键名来访问元素 列表是有有序的 通过下标来访问 可以进行修改 列表 [] 是python中使用 ...
随机推荐
- .Net RabbitMQ实战指南——RabbitMQ相关概念介绍
什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...
- [leetcode] 36. 有效的数独(Java)
没啥好说的,直接上就行 36. 有效的数独 class Solution { public boolean isValidSudoku(char[][] board) { Map<Charact ...
- MongoDB学习笔记:Python 操作MongoDB
MongoDB学习笔记:Python 操作MongoDB Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...
- Go语言的函数02---参数
package main import "fmt" /* 常量,变量,函数---源代码的成员 给成员命名的字符称之为[标识符] 合法的标识符有:大小写字母,数字,下划线 命名时不能 ...
- java中的Class.forName的作用
Class.forName有什么作用 Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和ne ...
- 『动善时』JMeter基础 — 37、将JMeter测试结果写入Excel
目录 1.环境准备 (1)引入操作Excel文件的基础JAR包 (2)引入封装自定义操作Excel文件的JAR包 2.准备测试需要的数据 3.测试结果写入Excel演示 (1)测试计划内包含的元件 ( ...
- Linux学习笔记:Linux命令之文件处理命令
文件处理命令 touch 命令名称:touch 执行权限:所有用户 功能描述:创建空文件 语法:touch [文件名] touch创建文件的时候命名不推荐存在空格,如下面的情况 1touch prog ...
- mybatis学习——实现分页
首先回顾一下分页的sql语句: SELEC * FROM 表名 LIMIT startIndex,pageSize tips: *startIndex:起始的位置(从哪个元素开始分页) *pageSi ...
- windows10环境下gcc环境变量的配置
1.首先打开控制面板-系统和安全-系统-高级系统设置,打开环境变量 2.在用户变量里找到Path,点击编辑,点击新建,找到Qt的tools安装目录并将目录复制进去保存,我的目录是C:\Qt\Qt5.9 ...
- 纯小白干货:Java import以及Java类的搜索路径
如果你希望使用Java包中的类,就必须先使用import语句导入.import语句与C语言中的 #include 有些类似,语法为:import package1[.package2-].classn ...