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中使用 ...
随机推荐
- elasticsearch_dsl 操作
import elasticsearch from elasticsearch_dsl import Search, MultiSearch # Search-执行一个搜索,MultiSearch-同 ...
- Step By Step(Lua模块与包)
Step By Step(Lua模块与包) 从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块.从使用者的角度来看,一个模块就是一个程序库,可以通过requi ...
- 低层级GPU虚拟内存管理引论
低层级GPU虚拟内存管理引论 Introducing Low-Level GPU Virtual Memory Management CUDA应用程序越来越需要尽可能快速高效地管理内存.在CUDA 1 ...
- 为什么edge AI是一个无需大脑的人
为什么edge AI是一个无需大脑的人 Why edge AI is a no-brainer 德勤预计,到2020年,将售出超过7.5亿个edge AI芯片,即在设备上而不是在远程数据中心执行或加速 ...
- 一文带你了解.Net自旋锁
本文主要讲解.Net基于Thread实现自旋锁的三种方式 基于Thread.SpinWait实现自旋锁 实现原理:基于Test--And--Set原子操作实现 使用一个数据表示当前锁是否已经被获取 0 ...
- Django基础之cookie与session
cookie与session 由来及简介 HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上 3.无连接 4.无状态 基于HTTP协议的通信无法记录客户端状态 但是现在很多软 ...
- java线程和操作系统线程的异同(大图对比)
先看看两者的对比: 可以发现: 1.java中细分了阻塞,将阻塞给分成了三个不同类型的阻塞. 2.java没有区分就绪状态和运行状态.java将这两种状态合并成runnable状态. 3.还有一个容易 ...
- MySQL 面试必备:又一神器“锁”,不会的在面试都挂了
1 什么是锁 1.1 锁的概述 在生活中锁的例子多的不能再多了,从古老的简单的门锁,到密码锁,再到现在的指纹解锁,人脸识别锁,这都是锁的鲜明的例子,所以,我们理解锁应该是非常简单的. 再到MySQL中 ...
- 在Centos7下安装RabbitMQ
1.背景 不用多说,这东西好用! 2.安装 步骤一:下载安装包 链接:https://pan.baidu.com/s/1PIYI60wX6L7BtVyVft-vSA 提取码:1234 复制这段内容后打 ...
- SCP,SSH应用