一、List遍历与排序
1、遍历
user_id = [1, 4, 7, 2, 4, 9, 7, 5,9,18 ]
for i in range(10):
print(i)
for ii in range(len(user_id)):
print(user_id[ii])
for v in user_id:
print(v)
2、排序:reverse()、sort()用法
user_id_list = [9, 7, 5, 9, 18]
user_id_list.reverse() # 倒序排列
print(user_id_list)
# 升序
user_id_list.sort()
print("升序:")
print(user_id_list)
print("倒序:")
user_id_list.sort(reverse=True)
print(user_id_list)
3、切片
基本格式:list[i:i+N:M]
含义:从第i位索引起,向右取到N位元素为止,按M间隔过滤,M可以不提供,默认值是:1
4、删除列表
- ⽤del list[m] 语句,删除指定索引m处的元素。
- ⽤remove()⽅法,删除指定值的元素(第⼀个匹配项)。
- ⽤pop()⽅法,取出并删除列表末尾的单个元素。
- ⽤pop(m)⽅法,取出并删除索引值为m的元素。
- ⽤clear()⽅法,清空列表的元素。(杯⼦还在,⽔倒空了)
- ⽤del list 语句,销毁整个列表。(杯⼦和⽔都没有了)
二、dict字典与json异同
从形式上看,都是“Key:Value”的形式。
但是从本质上讲,字典是一种数据结构,而json是一种格式;字典有很多内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具备操作性,并且是格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,而且“key”必须使用边界符(双引号),但字典就无所谓了。
Python中提供了json.load()转换函数,方便json数据的调用。
-----字典的常用方法
1、增
new_user = {}
# 增
new_user['name'] = 'xiaozhang'
new_user['age'] = 18
new_user['inst'] = ['计算机', '英语', '跑步']
new_user['score'] = 95.5
print(new_user)
思考:什么情况下会用纯数字作为Key?
# 什么场景下会用纯数字做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)
--小练习
# 用for循环 把 用户名:密码作为key和value 写入到一个字典
user_list = ['00088880001', '00088880002', '00088880003']
pwd_list = [123456, 654321, 132465]
user_pwd = {}
for i in user_list:
j = user_list.index(i)
user_pwd[i] = pwd_list[j]
print(user_pwd)
2、删
# 通过del删除
print(user)
# del user['name']
# print(user)
print(user.pop('name'))
print(user)
3、改
# 改 就是在做重写操作
user['init'] = [1, 2, 3, 4, 5, 6]
print(user)
user['init'] = [2, 3, 4, 5, 6, 7]
print(user)
4、查
# 查
print("==============查询=============")
print(user['address'])
print(user['age'])
# print(user['name'])
5、遍历
print("user.items", user.items())
print("user.keys", user.keys())
print("user.values", user.values())
print("=========开始通过keys遍历=======")
for i in user.keys():
print(i, "的值是:")
print(user[i])
print("=========开始通过items遍历=======")
for x in user.items():
print(x)
print(x[0], x[1])
print("===========两个变量循环=======")
for k, v in user.items():
print(k, v)
print("========判断key是否存在========")
# 第一种 user['00088880004'] 如果不存在会报异常
# 异常捕获处理
# 第二种 user.get('00088880004') ,如果不存在会返回None
print(user.get('00088880004'))
print(user.get('age'))
三、字符串常用方法
1、输出要查找内容的次数
print(t.count("a"))
2、查找要找的内容片断,从左向右去找,找到第一个就返回被找到内容的下标
print(t.find("b"))
print(t.find("hab"))
3、index()和find形式一样,从左向右找
print(t.index("ha"))
print(t.index("b"))
4、format和format_map
un = "姓名:{name},年龄:{age}"
print(un.format(name="xiaowang", age=20))
把字典中的每个key和字符串中声明的站位去进行查找,format_map相比较format更灵活
print(un.format_map({"name": "xiaowang", "age": 20}))
5、其他方法
# strip 去除前后空格,但是不会去字符串中间的
print(" abc".strip())
# 是否是空格
isspace()
# 是否包含数字
isalpha()
# 大小写转化
print(t.upper())
print(f.lower())
6、重点方法
1)split()切分
f = "xiaowang,xiaoli,xiaobai,xiaohong"
print(f.replace(",", "\n"))
# for k in f:
# print("k:",k)
new_f = f.split(",") # 切分String
2)reverse()反转
new_f.reverse()
3)是否以输入的内容开始/结束
# 是否以我输入的内容开始/结束
print(t.startswith("h"))
print(t.endswith("h"))
print(t.endswith("b"))
4)去除左空格、右空格
# left strip right strip
t.lstrip()
t.rstrip()
四、集合与元组(Tuple)
1、异同点
- 不同点:元组数据不能修改、声明方式不一样
- 共同点:取值与常用方法类似,只要不是不是修改元组数据的操作都可以执行
2、声明元组:t=(0,1,2,3)
3、set()方法
# 集合 set
# 集合内部数据,不可重复,可以用来做去重
l1 = [100, 1, 3, 5, 6, 5, 2, 8, 5, 1, 3, 20]
s1 = set(l1)
l2 = list(s1)
print(s1)
print(l2)
4、集合常用方法:
1)add和inert
print("=======给set和list添加值")
s1.add(3)
s1.add(5)
s1.add(8)
s1.add(9)
l2.insert(len(l2), 3)
l2.insert(len(l2), 5)
l2.insert(len(l2), 8)
l2.insert(len(l2), 9)
print(s1)
print(l2)
2)合并集合
d1 = {1, 2, 3, 4}
d2 = {2, 3, 4, 5}
d1.update(d2)
print(d1)
3)交集
# 交集
d3 = {1, 2, 3, 4}
d4 = {2, 3, 4, 5}
d5 = d3.intersection(d4)
print("d5", d5)
4)并集与差集
# 并集
d6 = d3.union(d4)
print(d6)
# 差集
d7 = d3 ^ d4
print(d7)
---扩展整合:列表、集合、元组、字典相互转换
# 列表转集合(去重)
list1 = [6, 7, 7, 8, 8, 9]
set(list1)
# {6, 7, 8, 9}
#两个列表转字典
list1 = ['key1','key2','key3']
list2 = ['1','2','3']
dict(zip(list1,list2))
# {'key1': '1', 'key2': '2', 'key3': '3'}
#嵌套列表转字典
list3 = [['key1','value1'],['key2','value2'],['key3','value3']]
dict(list3)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
# 列表、元组转字符串
list2 = ['a', 'a', 'b']
''.join(list2)
# 'aab'
tup1 = ('a', 'a', 'b')
''.join(tup1)
# 'aab'
五、非空即真
1、空字符串和长度为0的字符串
print(bool(None))
# False
print(bool(""))
# False
print(bool("1"))
# True
2、List空与List有参数
# list 空和有参数
print(bool([]))
# False
print(bool([1]))
# True
3、dict为空和有参数
# dict 空和有参数
print(bool({}))
# False
print(bool({"name": "zhangsan"}))
# True
---练习:判断用户是否输入用户名
user = input("请输入用户名:").strip()
print(user)
if user:
print("用户输入的内容是", user)
else:
print("未输入")
六、文件读写
---文件读取:打开文件->读取内容->关闭文件
1、打开文件方法
---思考:with...open与open区别?
file = open("n.txt", encoding='utf-8')
fp=open('./allData.json','w',encoding='utf-8')
# 创建文件夹
if not os.path.exists('./qiutuLibs'):
os.mkdir('./qiutuLibs')
# with...open
imgPath = './qiutuLibs/' + src_name
with open(imgPath, 'wb') as fp:
fp.write(image_data)
2、文件读取方法:
1)file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有
2)file.readlines[sizeint]
读取整行,包括\n字符
3)file.readlines([sizeint])
读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,减轻读写压力
# 全部读取出来了
# open打开的文件,是一个流,
print("readline:::", file.readline())
print("readlines:::", file.readlines()) # 将数据转为一个list
# 第一种遍历文件的方式,全部读取并且转为list
for line in file.readlines():
print("line::", line.strip())
# 第二种遍历文件的方式,逐行读取进行操作,不会提前加载到内存中,可以解决性能问题
for line in file:
print("line::", line.strip())
3、关闭文件
file.close
4、文件操作模式
操作模式:r(read)、w(write)、a(append)
- r:仅读取
- w:仅写入
- a:追加模式
file1 = open("a.txt", "w", encoding="utf-8")
data = "天琴座\n"
# 写入数据
file1.write(data)
file1.write(data)
l1 = ["xiaohei", "xiaobai", "xiaohong", "xiaoming"]
# file1.writelines(l1)
for l in l1:
file1.write(l)
file1.write("\n")
file1.close()
# 追加模式
file2 = open("a.txt", "a", encoding="utf-8")
file2.close()