test
一级标题
加粗
斜体
引用
嵌套引用
first
second
first
1
2
second
二级标题
12345678910code#include <stdio.h>int main(){ for (int i = 0; i < 5; i++) printf("Hello Grayson~%d\n", i); return 0;}
分隔符
这是一个链接百度一下,你就知道 (baidu.com)
11
11
11
22
22
22
33
33
33
Python数据结构--丰富的序列
本节主要内容:
列表推导式和生成器表达式
元组的两种用法——记录和不可变列表
序列拆包和序列模式
读写切片
专门的序列类型,例如数组和队列
1.1 内置序列类型概览
可简单分为:
容器序列:可存放不同类型的项,其中包括嵌套容器。例如:list、tuple和collections.deque。
扁平序列:可存放一种简单类型的项。例如:str、bytes和array.array。
另外,还可按可变性对序列分类。
可变序列:例如list、bytearray、array.array和collections.deque。
不可变序列:例如tuple、str和bytes。
1.2列表推导式和生成器推导式
1.2.1可读性
示例一
123456789symbols = '$¢£¥€¤'code = []for symbol in symbols: code.append(ord(symbol))print(code)'''output:[36, 162, 163, 165, 8364, 164]'''
示例 ...
Python数据结构--数据结构模型
python风格的纸牌
示例
123456789101112131415import collectionsCard = collections.namedtuple('Card', ['rank', 'suit'])class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list('JQKA') suits = 'spades diamonds clubs hearts'.split() def __init__(self): self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] def __len__(self): return len(self._cards) def __getitem__(self, position): return self ...
每日一题1-4-读《Python-Codebook》
1.16 筛选序列中的元素
列表推导式
12345mylist = [1,4,-5,10,-7,2,3,-1][n for n in mylist if n > 0]'''输出:[1, 4, 10, 2, 3]'''
但缺点是如果原始数据非常大,这么做会产生一个庞大的结果。可以考虑使用生成器通过迭代的方法筛选结果。
生成器
12345678pos = (n for n in mylist if n > 0)print(pos)for x in pos: print(x,end=" ")'''输出:<generator object <genexpr> at 0x0000020FDCAD2B90>1 4 10 2 3'''
1.17 从字典中提取子集
使用字典推导式。
12345678910111213141516171819prices = { 'ACME': 45.23 ...
每日一题1-3-读《Python-Codebook》
1.11 对切片命名
内置的slice()函数可以创建一个切片对象。
123items = [0,1,2,3,4,5]print(items[1:3])print(items[slice(1,3)])
两者的输出相同。
1.12 找出序列中出现次数最多的元素
collections模块中的Counter类正是为此类问题设计的。
Counter 是 Python collections 模块中的一个类,用于计数可哈希对象。它是字典的一个子类,其中元素作为键,它们的计数作为值。Counter 可以用来计算值出现的次数。
Counter 类的一些主要特性和用法包括:
计数元素:可以从一个可迭代对象或映射对象初始化 Counter 对象,计算各元素出现的次数。
元素方法:elements() 方法返回一个迭代器,包含每个元素重复出现次数的所有元素。
最常见元素:most_common([n]) 方法返回一个列表,包含 n 个最常见元素及其计数,按计数降序排列。
更新计数:可以使用 update() 方法从另一个可迭代对象或映射对象添加计数。
数学运算:Counter 支持各种数学运算,如 ...
每日一题1-2-读《Python-Codebook》
1.6在字典中将键映射到多个值
将这多个值保存在另一个容器如列表或集合中。
使用collections模块中的defaultdict类。
collections模块中的defaultdict类是Python标准库中的一个字典(dict)子类,它提供了所有常规字典的方法。defaultdict的主要特点是在访问不存在的键时,会自动创建该键并将其值设置为一个默认值,这个默认值是通过在创建defaultdict对象时传递给构造器的可调用对象(如函数)返回的。
以下是defaultdict的一些主要特性:
自动创建不存在的键:当尝试访问一个不存在的键时,defaultdict会自动创建这个键并将其值设置为由默认工厂函数返回的值。
可指定默认值的类型:可以指定默认值的类型,如list、int、set等,这使得defaultdict非常适合于收集和组织数据。
简化代码:使用defaultdict可以避免在字典操作中频繁检查键是否存在的代码,使得代码更简洁易读。
1.7让字典保持有序
collections模块中的OrderedDict类。当对字典做迭代时,他会严格按照元素初始添加顺序进行。 ...
每日一题1.1-读《Python Codebook》
1.1 将序列分解为单独的变量
简单的赋值操作。
1.2从任意长度的可迭代对象中分解元素
“*表达式”得到列表。
1.3保存最后N个元素
collection.deque方法
collections.deque是Python标准库collections模块中的一个类,提供了一个双端队列。双端队列(deque,全称double-ended queue)是一种具有队列和栈性质的抽象数据类型。它允许你从两端附加和弹出元素,因此提供了一种灵活的数据存储方式。
collections.deque的主要特点和用法包括:
快速添加和弹出:与列表相比,deque在两端添加(append)和弹出(pop)操作的时间复杂度都是O(1),而列表在头部添加和弹出的时间复杂度是O(n)。
线程安全:deque是线程安全的,可以在多线程环境中使用,而无需额外的锁定机制。
支持最大长度:可以限制deque的大小。当限定的大小被超出时,添加新元素会导致对应端的旧元素被移除。
支持迭代:deque支持迭代,可以像列表一样进行循环遍历。
支持索引访问:虽然deque支持从两端快速添加和弹出元素,但也支持索引访问。不 ...
Python爬虫(三)
主要是实战部分
豆瓣排行
主要目的是爬取豆瓣top250,并存储在Excel里。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport pprintPageIndex = range(0, 250, 25)def DownloadAllHtmls() -> list: """ 爬取10个页面的HTML """ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome ...
Python爬虫(二)
再次尝试爬取自己的博客
123456789101112131415161718192021import requestsfrom bs4 import BeautifulSoupfrom urllib.parse import unquoteurl = "http://www.wangzhilei.fun"r=requests.get(url)if r.status_code != 200: raise Exception()r.encoding ='utf-8'html_doc=r.textsoup = BeautifulSoup(html_doc,"html.parser")div_nodes = soup.find_all("div",class_ = "recent-post-info")for div_node in div_nodes: link = div_node.find("a") print(unquote(link[" ...
Python爬虫(一)
笔者在大一时曾系统学习过python,但也只掌握了一些基础的语法知识,并没有真正的深入了解python。这次想尝试一下python中一个很重要的部分——爬虫。
测试库
先测试一下需要安装的库
12345import requestsfrom bs4 import BeautifulSoupimport seleniumprint("ok")
得到ok说明库安装完成。
爬取自己博客
r.status_code 返回200,说明请求成功。
再尝试其他命令。
常用属性
说明
encoding
查看或者指定响应字符编码
status_code
返回HTTP响应码
url
查看请求的 url 地址
headers
查看请求头信息
cookies
查看cookies 信息
text
以字符串形式输出
content
以字节流形式输出,若要保存下载图片需使用该属性
爬取百度
爬取成功。
尝试r.headers,发现Content-Type没有带编码信息
默认为’ISO-8859-1’
再r.text,存在大量乱码。
查看网页源代 ...