第二周总结
1.安装环境
-
下载 requests pip 包
修改三方库的下载来源为国内的镜像网站 ---> pip config set global.index-url https://pypi.doubanio.com/simple 三方库 ---> requests ---> pip install requests 协议 ---> 通信双方需要遵守的会话的规则。 HTTP / HTTPS ---> 通过URL访问网络资源的协议 ---> Hyper-Text Transfer Protocol(超文本传输协议) 请求(request) - 响应(response)
2.知识汇总
1.列表
-
1.列表的三种搭建方式
list1=['a','b','c'] # 创建列表方法一:字面量语法 list2=list(range(1,10)) # 创建列表方法二:构造器方法 list3=[i** 2for i in range(1,10)] # 创建列表方法三,生成式(推导式)语法
-
2.列表的功能,遍历索引,成员运算,合并,比大小(根据第一个数字,字母,中文字,根据康熙字典)
for i ,x in enumerate(list1): print(i,x) # 遍历,可以加标签 print(10 in list3) print(5 not in list2) # 成员运算 list5=[1,3,5,7] list6=[4,4,8] list6+=list5 print(list6) # 合并 list7= list(range(1,8,2)) list8=[0,3,5,7,9] print(list7>list8) # 比大小比最开始那个数字 list9 =['apply'] list10 =['black'] print(list9>list10) # 根据字母的编码 比大小 print('王大锤'<'游端炜') # 康熙字典
-
3.列表的运算,添加(两种),删除(三种) ,查找显示位置,计算个数,列表的反转,列表的排序,如果
列表中的元素是字符串形式,可以转化为整数nums =[0,10,100,1000] nums.append(10000) # 在最后添加一个数据 nums.insert(1,5) # 在指定位置添加元素 nums.pop() # 删除最后位置的元素 nums.pop(0) # 删除指定位置的元素 del nums[0] # 删除指定位置元素,不常用 nums.remove(1000) # 如果有多个1000.移除第一个 while 1000 in nums: nums.remove(1000) # 删除所有1000 if 1000 in nums: print(nums.index(1000)) # 显示1000所在位置 if 1000 in nums: print(nums.count(1000)) # 计数1000个数 nums.reverse() # 反转操作 nums.sort() # 排序,默认是:升序从小到大。(reverse=True),可以改成降序。 nums.sort(key=int) # 将列表的元素转化成整数的形式排序
-
4.列表中的抽样,3种抽样,1种打乱
import random nums =[1,2,3,4,5,6,7,8,9,10] print(random.sample(nums,k=5)) # 不放回抽样 print(random.choices(nums,k=5)) # 有放回抽样 print(random.choice(nums)) # 随机选择一个 random.shuffle(nums) print(nums) # 重新排序
2.元组
-
1.重复运算,成员运算,合并运算,索引切片(元组是不可变的容器,除了不能更改其他和列表一样)
a=(0,) b=(1,2,4) # 元组是不可变的容器 print(type(a)) print(a*3) # 重复运算 print(3 in b) print(2 not in b) # 成员运算 c=a+b print(c) # 合并运算 print(a[0],b[1:3]) # 索引切片 # 但是不能进行修改(添加删除)
3.字符串
-
1.字符串三种搭建方式
a='hello' b ="hello" c=""" hello """ print(a,b,c) # 输入三种字符串方式
-
2.字符串制表符,换行符,占位符,转义
s1 = '\time up \now' print(s1) # 字符串s1中\t是制表符(四个空格),\n是换行符 s2 = r'\time up \now' print(s2) # 带占位符的字符串,保留原来的意思 s3 = '\141\142\143\x61\x62\x63' print(s3) s4 ='\u9a86 \u660a' print(s4) # \u,转义成中文
-
3.字符串的运算,注意:字符串也是不变数据类型,只能进行读操作,不能进行改写操作!!!获取字符串长度(字符串没有下标,和集合一样)。循环遍历,重复,成员运算,比较大小(字符编码大小),字符串的拼接。
a = 'hello, world' # 获取字符串的长度 print(len(a)) # TypeError: 'str' object does not support item assignment # a[0] = 'H' # 循环遍历字符串的每个字符 for i in range(len(a)): print(a[i]) for i in a: print(i) # 重复 print(a * 5) # 成员运算 print('or' in a) print('ko' in a) b = 'hello, World' # 比较运算(比较字符串的内容 ---> 字符编码大小) print(a == b) print(a != b) c = 'goodbye, world' print(b > c) d = 'hello, everybody' print(b >= d) print(ord('W'), ord('e')) # 字符串的拼接 e = '!!!' print(d + e) f = ' goodbye' print(d + e + f)
-
4.字符串变换,四种转大小写,四种判断,首尾判断
a = 'i LOVE you' # 转大写 print(a.upper()) # 转小写 print(a.lower()) # 首字母大写 print(a.capitalize()) # 每个单词首字母大写 print(a.title()) b = 'abc123' # 判断字符串是不是数字 print(b.isdigit()) # 判断字符串是不是字母 print(b.isalpha()) # 判断字符串是不是字母和数字 print(b.isalnum()) # 判断字符串是不是ASCII码字符 # Python 3.7中添加的一个方法 print(b.isascii()) c = '你好呀' print(c.isascii()) # 判断字符串是否以指定内容开头 print(c.startswith('你好')) # 判断字符串是否以指定内容结尾 print(c.endswith('啊'))
-
5.字符串查找其中指定单词位置(两种)
a = 'Oh apple, i love apple.' # index - 从左向右寻找指定的子串(substring),可以指定从哪开始找,默认是0 # 找到了返回子串对应的索引(下标),找不到直接报错(程序崩溃) print(a.index('apple')) print(a.index('apple', 10)) print(a.rindex('apple')) # ValueError: substring not found # print(a.index('banana')) print(a.find('apple')) print(a.find('apple', 10)) print(a.rfind('apple')) print(a.find('banana')) print(a.rfind('banana'))
-
6.字符串,居住,右对齐,左对齐
print(a.center(30,' ')) # center方法以宽度80将字符串居中 print(a.rjust(60,'*')) # rjust方法以宽度60将字符串右对齐 print(a.ljust(20,'-')) # ljust方法以宽度20将字符串左对齐
-
7.修建字符串多余空格
s = ' jackfrued@126.com \t\r\n' # strip方法获得字符串修剪左右两侧空格之后的字符串 print(s) print(s.strip()) # jackfrued@126.com
-
8.将字符串中指定字符替换成指定字符
a='hello,world' a_1=a.replace(',',' ') # 将,转化为空格
-
9.字符串的拆分和合并
words =a_1.split() print(words,len(words)) # 可以随便拆分 words=a_1.rsplit() print(words,len(words)) # 从左向右,拆分 words=a_1.split(' ',maxsplit=1) # 最多可以拆分一次 c=['abc','def','ghi'] print('-'.join(c)) # 合并列表中各字符串
-
10.电脑编码转化为语言
a='我爱你中国' b=a.encode('gbk') c=a.encode('utf-8') # gbk<-----gb2312(两个英文的组合成一个中文的)《----ascii(英文的)(所以中文是2字节,英文是1字节) # utf-8编码,是unicode(万国码)的一种实现方式,中文字在utf-8是3字节 print(type(b)) print(b) print(c) d=b'\xce\xd2\xb0\xae\xc4\xe3\xd6\xd0\xb9\xfa' e=b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd' print(d.decode('gbk'),len(d)) print(e.decode('utf-8'),len(e)) # uft-8是一种变长字节 # 数字和英文,是一字节 # 中文是三字节 # 表情enmoj是四字符
-
11.字符串明码,暗码转化
message ='i love you' table =str.maketrans('abcdefghijklmnopqrstuvwxyz','defghijklmnopqrstuvwxyzabc') # 通过字符串的translate方法实现字符串转化 print((message.translate((table))))
4.集合
-
1.创建空集合
set2 = set() print(set2) # 创建空集合
-
2.集合的三种特性,确定性,互异性,无序性
set1 = {1,2,1,2,3,3,4,6} print(type(set1)) print(set1) # 互异性,输出只能1,2,3,4,6 # print(set[1]) # # 无序性,会报错
-
3.集合的交集,并集,差集,对称差
set1 = {1, 2, 3, 4, 5} set2 = {2, 4, 6, 8} # 成员运算 - 确定性(元素要么在集合中,要么不在集合中) # 集合的成员运算在效率上是远远高于列表的成员运算 print(1 in set1) print(1 not in set1) # 交集 print(set1 & set2) print(set1.intersection(set2)) # 并集 print(set1 | set2) print(set1.union(set2)) # 差集 print(set1 - set2) print(set1.difference(set2)) print(set2 - set1) print(set2.difference(set1)) # 对称差 print(set1 ^ set2) print((set1 | set2) - (set1 & set2)) print(set1.symmetric_difference(set2))
-
4.集合判断真子集,子集,超集
set3 = {1, 2, 3, 4, 5, 6, 7, 8, 9} # 判断真子集 print(set1 < set3) print(set1.issubset(set3)) # 判断子集 print(set1 <= set3) # 判断超集 print(set3 > set2) print(set3.issuperset(set2))
-
5.集合添加元素,删除元素,清空元素
# 集合底层用了哈希存储 # 哈希存储的关键是设计一个好的哈希函数,让不同对象尽可能的产生不同的哈希码 # 可不变容器都,不能放入集合中,无法计算哈希码。作为集合元素 # 集合底层使用的是哈希存储,通过计算元素的哈希码来决定元素存储的位置,这是一种高效率的存储方案。 # 哈希存储的关键是设计一个好的哈希函数,尽量保证不同的对象能够计算出不同的哈希码。 # 可变容器(列表、集合、字典)都无法计算哈希码,因此都不能放到集合中,作为集合的元素 set1 = {'apple', 'banana', 'pitaya', 'apple'} # 添加元素 set1.add('grape') set1.add('durian') print(set1) # 删除元素 set1.discard('pitaya') print(set1.pop()) print(set1.pop()) print(set1) # 清空元素 set1.clear() print(set1)
5.字典
-
1.构建字典的三种方式
student1={'id':'56466', 'name':'ydw', 'sex':'true', 'birthday':'1980-11' } print(student1) student2=dict(id=1002,name='ydx',sex=True) print(student2) # 构造器函数 dict1 = {i:i**2 for i in range(1,10)} print(dict1) # 生成式语法
-
2…遍历字典中的键,字典中的值,字典中的键值对
for key in student1.keys(): print(key) # 遍历字典中的键 print('-'*20) for value in student1.values(): print(value) print('-'*20) # 遍历字典中的值 for key,value in student1.items(): print(key,value) # 遍历键值对
-
3.成员运算,字典索引(两种,其中一种可以添加键值对,另一个会报错)。字典添加,删除键值对。
student1['address']='四川成都' print(student1) # 如何字典中没有对应索引,就增加一组键值对 print(student1.get('age')) print(student1.get('age',20)) print(student1['birthday']) # 使用get,不会报错,如果没有,会返回一个空值(可以指定默认值) del student1['name'] # 删除键值对 # 最好用get,或者先判断是否存在这个键,再输出
-
4.更新合并字典,删除键值对,查找替换键值对
dict1 = {'A': 100, 'B': 200, 'C': 300} dict2 = {'D': 400, 'E': 500, 'A': 600} # 更新(元素的合并或更新) dict1.update(dict2) print(dict1) print('-'*20) # 删除 ---> 键必须存在,如果不存在会产生KeyError # del dict1['B'] dict1.pop('B') dict1.popitem() # 默认删除最后一个键值对 print(dict1) print('-'*20) print(dict1.setdefault('C')) print(dict1.setdefault('K', 10000)) # 如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于字典中,将读出该键原来对应的值 # ,default的值不会覆盖原来已经存在 print(dict1) # 清空所有 dict1.clear() print(dict1)
-
5.通过接口,jason,将网上数据字典转化为我们可用数据
""" example08 - 联网获取JSON格式的数据并解析出需要的内容 修改三方库的下载来源为国内的镜像网站 ---> pip config set global.index-url https://pypi.doubanio.com/simple 三方库 ---> requests ---> pip install requests 协议 ---> 通信双方需要遵守的会话的规则。 HTTP / HTTPS ---> 通过URL访问网络资源的协议 ---> Hyper-Text Transfer Protocol(超文本传输协议) 请求(request) - 响应(response) Author: Hao Date: 2021/7/30 """ import requests # 通过get函数发起一个请求得到一个响应 resp = requests.get( url='http://api.tianapi.com/guonei/index', params={'key': 'e8c5524dd2a365f20908ced735f8e480', 'num': 30} ) # news_dict = json.loads(resp.text) # 从响应中获取JSON数据直接转成字典 news_dict = resp.json() news_list = news_dict['newslist'] for news in news_list: print(news['title']) print(news['url'])