python3——列表、元组、字典、集合、

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)

程序=数据结构+算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值