百测学习之python-list、dict、字符串切片、集合
1、List 列表
1)、基本操作
增
append() 添加到最后一个元素
insert(index,value) 将value添加到index位置
删
remove() 删除指定内容,如果list中有多个相同内容,则删除从左向右找到的第一个
改
list[index] = xxx 直接为指定index的位置赋值即可
查
list[index] 直接通过指定索引获取值即可
2)、遍历list数据
user_id_list = [9, 7, 5, 9, 18]
# 第一种方式通过索引(下标)获取元素
for i in range(len(user_id_list)):
print(user_id_list[i])
# 第二种方式通过item获取元素
for v in user_id_list:
print(v)
3) 、排序
user_id_list = [9, 7, 5, 9, 18]
user_id_list.reverse() # 列表翻转输出,但不会按照大小排序,会改变原有值的顺序
print(user_id_list)
升序 :user_id_list.sort()
降序 :user_id_list.sort(reverse=True)
2、dict字典,类似json,字典的用法
key 定义好之后,不会限制value值的类型
user = {"name": "xiaowang", "age": 18, "address": "beijing"}
print(user)
增
1)、 见名知意的定义
new_user = {}
new_user['name'] = 'xiaozhang'
new_user['age'] = 18
new_user['inst'] = ['计算机', '英语', '跑步']
new_user['score'] = 95.5
print(new_user)
2)、什么场景下会用纯数字做key
# 每个key为userid,value:user信息
user_info = {}
user_info[1001] = {"name": "xiaozhang", "age": 18}
user1001 = {"name": "xiaozhang", "age": 18}
user_info[1001] = user1001
user_info[1002] = {"name": "xiaobai", "age": 19}
user_info[1003] = {"name": "xiaohei", "age": 28}
user_info[1004] = {"name": "xiaohong", "age": 12}
print(user_info)
删
# 通过del删除
print(user)
del user['name']
print(user)
# pop被删除的值打印出来
print(user.pop('name'))
print(user)
改
直接改写前面的值
user['name'] = '张三'
查
精准查询:
以key作为索引查询
遍历整个字典:
print("=========开始通过keys遍历=======")
for i in user.keys():
print(i, "的值是:")
print(user[i])
print("===========两个变量循环=======")
for k, v in user.items():
print(k, v)
练习:用for循环 把 用户名:密码作为key和value 写入到一个字典
(考虑程序健壮性问题时:可以先判断列表长短,那个短用那个作为标准)
userid_list = ['000088880001', '000088880002', '000088880003']
pwd_list = [123456, 564321, 123456]
user = {}
for i in range(len(userid_list)):
user[userid_list[i]] = pwd_list[i]
print(user)
3、字符串处理
t = 'hahab'
print(t.count("a")) # 输出要查找内容出现的次数
print(t.find("a")) # 查找要找的内容片段,从左向右去找,当找到第一个就返回被找到的内容的下标
print(t.index("ha")) # 和find是一样的形式,从左向右去找
un = "姓名:{name},年龄:{age}"
print(un.format(name="xiaowang", age=20))
print(un.format_map({"name": "xiaowang", "age": 20})) # 把字典中的每个key和字符串中声明的站位去进行查找,format_map相比较format更灵活
1.# strip 去除前后空格,但是不会去字符串中间的
print(" abc".strip())
print("abc ".strip())
print(" abc ".strip())
print(" a b c ".strip())
2.# isspace() 是否是空格
s = " "
s1 = " 1"
s2 = ""
print(s.isspace())
print(s1.isspace())
print(s2.isspace())
3.# isalpha 是否包含数字,不包含数字返回为true,包含返回为false
s = "今天"
d = "123"
print(s.isalpha())
print(d.isalpha())
4.# 包含纯数字
pwd = input("输入6位数字密码:").strip()
if pwd.isalpha():
print("密码不包含数字")
else:
print("密码包含数字")
f = "HHHSwrwrrwSS"
print("f:", f)
print(f.upper()) # 做大写的转换
print(f.lower()) # 做小写的转换
t = 'hahab'
5.# 是否以我输入的内容开始/结束
print(t.startswith("h"))
print(t.endswith("h"))
print(t.endswith("b"))
t.lstrip() # left strip 左边去重
t.rstrip() # right strip 左边去重
6.重点:切分字符串
f = "xiaowang,xiaoli,xiaobai,xiaohong"
print(f.replace(",", "\n")) # 第一种形式:用\n替代"," 实现字符串用","切分
new_f = f.split(",") # 第二种形式:切分String,保存成一个list
for name in new_f:
print(name)
new_f.reverse() # 反转输出list
print(new_f)
练习:日志监控系统的第一步(解析日志),输出对应的ip
log = '223.104.3.169 - - [03/Jul/2020:17:09:31 +0800] "GET /bbs/forum.php HTTP/1.1" 404 1045 "-" "Apache-HttpClient/4.5.10 (Java/1.8.0_201)"'
log1 = log.split(' ') # 转换为list
print(log1[0])
7.字符串的切片:
s[起始:结束:步长]
s = "http://www.limlhome.cn/bbs/forum.php"
n = "123456789"
# s[起始:结束:步长]
# 如果只有起始,没有结束,则代表从起始位置到最后
print(s[7:])
# 如果只有结束,没有起始,则代表从0开始到结束点的前一个结束
print(s[:22])
# 如果,左右区间都有设置,则输出指定内容
print(s[7:22])
print("www.limlhome.cn--------")
print(s[7:-14]) #从右边向左推,去掉-1到-14的值
print("===============")
# 如果需要跳一位输出,则设置步长
# print(n)
# print(n[::2])
# print(n[1::2])
8.不改变字符串的原有元素位置,只倒序输出
n = "123456789"
for i in range(len(n)):
print(len(n)-i)
9.切片用到list上
# list应用切片的取值规则 =3 && <6
li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(li[3:6])
4、元祖和集合
# 元祖 (tuple)
t = (0, 1, 2, 3)
l1 = [0, 1, 2, 3]
# 区别: 1、元祖的数据,不可修改 2、声明方式不一样
# 共同点: 取值及常用方法类似,只要不是修改元祖数据的操做就都可以执行
# t[0] = 100 报错
l1[0] = 100
print(t)
print(l1)
# print(t.index(1))
# print(t.count(2))
集合
# 集合 set
# 集合内部数据,不可重复,可以用来做去重 ,无序
l1 = [100, 1, 3, 5, 6, 5, 2, 8, 5, 1, 3, 20]
s1 = set(l1) #转换为集合,可以去重
l2 = list(s1) #转换为list,去重的值可以展示出来
s1.add(3) #有重复不增加
l2.insert(len(l2), 3) #不校验重复,可以增加
# 合并集合
d1 = {1, 2, 3, 4}
d2 = {2, 3, 4, 5}
d1.update(d2) # 合并后的全新数据d1,谁前谁后没有关系;不用重新赋值,d1更新为合并之后的集合
d6 = d1.intersection(d2) # 交集,必须进行赋值,不赋值输出为d1
# 交集的实际应用
# 权限系统,饭店用crm系统
# 很多饭店,每个饭店基于自己星级 来开通响应的权限 员工管理 菜单管理 点菜管理 财务管理 客房管理 。。。。。
# 饭店里有很多角色: 老板 前台(宴会、点菜、菜单) 服务员(宴会、点菜、菜单) 厨师长(员工、菜单) 厨师(菜单、订单)
# 取双方都有的权限,让用户使用,当任意一方不具备该权限,则用户就无法使用;
# 一定会用到交集、并集;
d7 = d1.union(d2) #并集
d8= d1 ^ d2 #差集
5、非空即真、
# 布尔类型
# True False
# if 对
# 否则
bool()
# 空字符串和长度为0的字符串,为False,反之为True
print(bool(None))
print(bool(""))
print(bool("1"))
# list 空和有参数
print(bool([]))
print(bool([1]))
# dict 空和有参数
print(bool({}))
print(bool({"name": "zhangsan"}))
# 当变量,被赋予了一个实际的值的时候,它一定是存在的,所以它是 True
# 当变量,没有赋值,它一定是不存在的,所以是False
使用举例:
username=input('请输入用户名:').strip()
if username:
print("输入的用户名为:",username)
else:
print("未输入")