redis存储数据类型:string、 list、 hash、 set 、sorted_set
列表list
- 列表是 有序、可变 的数据类型
- 列表中可以包含 不同类型 的对象
- 列表可以由 [ ] 创建
- 支持 下标 及 切片 操作
常用方法(功能:增删改查)
为了方便我们操作列表,Python中对所有列表提供了一些的功能。
序号 | 分类 | 关键字 / 函数 / 方法 | 说明 |
---|---|---|---|
1 | 增加 | 列表.insert(索引, 数据) | 在指定位置插入数据 |
列表.append(数据) | 在末尾追加数据 | ||
列表.extend(列表2) | 将列表2 的数据追加到列表 | ||
2 | 修改 | 列表[索引] = 数据 | 修改指定索引的数据 |
3 | 删除 | del 列表[索引] | 删除指定索引的数据 |
列表.remove(数据) | 删除第一个出现的指定数据 | ||
列表.pop | 删除末尾数据 | ||
列表.pop(索引) | 删除指定索引数据 | ||
列表.clear | 清空列表 | ||
4 | 统计 | len(列表) | 列表长度 |
列表.count(数据) | 数据在列表中出现的次数 | ||
5 | 排序 | 列表.sort() | 升序排序 |
列表.sort(reverse=True) | 降序排序 | ||
列表.reverse() | 逆序、反转 |
案例
li = ["alex", "jerry", "tom", "barry", "wall"]
l2 = [1,"a",3,4,"heart"]
print(li[::2]) # 请通过步长获取索引为 偶数 的所有值,并打印出获取后的列表
li.append("mike")# 列表中追加元素 mike,并输出添加后的列表
li.insert(0,"Tony")# 请在列表的第 1个位置插入元素 Tony ,并输出添加后的列表
li.insert(1,"Kelly")# 请修改列表第 2 个位置的元素为 Kelly,并输出修改后的列表
li.extend(l2) # 请将列表 l2 = [1,”a”,3,4,”heart”] 的每一个元素追加到列表 li 中,并输出添加后的列表
li.remove("barry") # 请删除列表中的元素 ”barry”,并输出删除后的列表
li.pop(1) # 请删除列表中的第 2 个元素,并 输出 删除元素后的列表
list01 = [-1,10,2,5,-6.5,2]
print(len(list01),list01.count(2))#2在列表中出现几次
list01.reverse() #列表反转
print(list01)
list01.sort()#升序排列
print(list01)
list01.sort(reverse=True)#降序排列
print(list01)
元组tuple
- 通过
()
创建元组 - 元组是有序的、不可变类型——安全
- 与列表类似,作用于列表的操作,绝大数也可以作用于元组
- 一般用于存储一些在程序中不应该被修改的一系列值
常见操作
由于元组不可变的特性,所有没有 增、删、改 操作,列表的不改变操作元组都能使用
注意:单元素元组的定义
如果一个元组中只有一个元素,那么创建该元组时,需要加上一个 逗号,否则创建的是string
tuple01 = (10,1.23,"hehe",True,10)
print(tuple01,type(tuple01))
print(tuple01[1],tuple01[2],tuple01[:3])
print(len(tuple01),tuple01.count(10))
print(1 in tuple01,100 not in tuple01)
#单元素元组的定义
tuple01=("he",)
print(type(tuple01))
字典
字典的定义 dict
-
dictionary
(字典) 是 除列表以外Python
之中 最灵活 的数据类型 -
字典同样可以用来 存储多个数据
- 通常用于存储 描述一个
物体
的相关信息
- 通常用于存储 描述一个
-
和列表的区别
- 列表 是 有序 的对象集合
- 字典 是 无序 的对象集合
-
字典用
{}
定义 -
字典使用 键值对 存储数据,键值对之间使用
,
分隔- 键
key
是索引 - 值
value
是数据 - 键 和 值 之间使用
:
分隔 - 键必须是唯一的
- 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
- 键
字典相关函数
len():返回字典中元素的数目
hash():不是为字典设计,可以判断对象是否可以作为字典的键
hash() 可以判断对象是否可以作为字典的键:
可变对象不能作为字典的key,例如:列表和字典;
不可变对象可以作为字典的键,例如:数值,字符串,和元组;
score = {"yuwen": 80, "shuxue":85}
print(score,type(score))
#查询 1.字典[key]:如果key不存在则报错
print(score["yuwen"],score["shuxue"])
#查询 2.字典.get(key,默认值=None):若key不存在,返回默认值,不报错
print(score.get("yuwen"),score.get("shuxue"))
print(score.get("yingyu","输入有误"))
#查key值:3.字典.keys()
print(score.keys()) # dict_keys(['yuwen', 'shuxue'])
#查values值:4.字典.values()
print(score.values()) #dict_values([80, 85])1
#5.字典.items()
print(score.items()) #dict_items([('yuwen', 80), ('shuxue', 85)]) 描述信息(列表里面放元组)
#添加/修改: 如果key存在,则修改;不存在,则添加
#单值操作:字典[key] = value
score["yuwen"]=90
score["yingyu"]=100
#批量操作: 字典.update(新字典)
score.update({"shuxue": 30,"tiyu":80})
#删除 1.字典.pop(key) 返回所删值
data=score.pop("yingyu")
#删除 2. del数据
del score["tiyu"]
#删除 3.字典.clear():清空字典
score.clear() #{}
案例:注册登录
userdb = {"zs":"123","ls":"456"}
# 支持新用户注册(添加),新用户名和密码注册到字典中
#1.输入用户名,判断用户名可用性(用户名userdb不存在则可用)
#2.如果用户名可用,则输入密码,将用户信息添加到userdb中
#3.如果用户名不可用,给用户相对应的提示即可
def register():
name = input("请输入用户名:")
if name in userdb.keys() :
print(f"用户名{name}已存在")
return
else :
passwd=input("请输入密码:")
userdb[name]=passwd
print(userdb)
# if __name__ == '__main__':
# register()
# 支持老用户登陆(查询),用户名和密码正确提示登陆成功
#1.提示用户输入用户名和密码
#2.用户名和密码输入正确则打印成功,否则失败
def login():
name = input("请输入用户名:")
passwd = input("请输入密码:")
if name in userdb.keys():
if passwd == userdb[name]:
print(f"name:{name} passwd:{passwd} 成功")
else:
print("失败")
else:
print("失败")
def show_menu():
# 定义变量prompt,提示用户输入选项
prompt = """(0) 注册
(1)登陆
(2)退出
请做出选择(0/1/2): """
while 1: # while循环,让用户可以无限重复操作
choice = input(prompt) # 提示用户输入信息
if choice not in ['0', '1', '2']:
print('无效的输入,请重试。')
continue # 结束此次循环,直接开始下次循环
if choice == '0': # 用户选择0
register()
elif choice == '1': # 用户选择1
login()
else: # 用户选择2,打印bye,退出while循环
print('Bye-bye')
break # 直接退出while循环
if __name__ == '__main__':
show_menu()
集合 set
- 集合与元组和列表相似都用于做容器,在内部可以放一些子元素
- 集合有三特殊特点:
子元素不重复
、子元素必须可哈希
、无序
。 - 不可查询、修改,可以添加删除
- 集合运算、自动去重
提示:目前可哈希的数据类型 int/str/tuple
;不可哈希的类型 dict/list/set
。
#集合运算
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
print(s1 & s2) #{'⽪⻓⼭'}
print(s1 | s2)#{'⽪⻓⼭', '冯乡⻓', '赵四', '刘科⻓', '刘能'}
print(s1-s2) #{'赵四', '刘能'}
print(s2-s1) #{'冯乡⻓', '刘科⻓'}
#集合去重
list01=[1,2,3,4,1,2,3,4]
print(list(set(list01))) #[1, 2, 3, 4]
案例:显示两文件的不同
# 需求
# 有两个文件:a.log 和 b.log
# 两个文件中有大量重复内容
# 取出只有在 b.log 中存在的行
# cat /opt/a.log :aaaaa
# bbbbb
# bbbbb
# /opt/b.log:bbbbb
# ccccc
# ccccc
with open("/opt/a.log",mode="r") as fsa ,open("/opt/b.log",mode="r") as fsb :
seta=set(fsa.readlines())
setb=set(fsb.readlines())
print(setb-seta)
程序=数据结构+算法