自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 python之Pandas统计分析

python之Pandas统计分析pandas数据结构序列数据帧访问数据行操作列操作索引重置时间数据数据统计基础统计聚合统计分组统计连接合并数据排序数据遍历数据整理高级功能pandas数据结构pandas是建立在numpy之上的数据分析库,该库提供了多种统计与分析功能,这些功能主要基于两个核心的数据结构:序列和数据帧。序列:是一维数组,是包含同种数据类型的数组。数据帧:是二维数组,可以理解为一个二维的表格,包含多个列,每个列内的数据类型相同,列与列之间的类型可以不同,大小可变。序列序列包含两

2021-08-11 12:02:57 2064 1

原创 python之numpy数值分析

python之numpy数值分析基础数组属性创建数组基本操作索引、切片和迭代形状操作更改形状数组堆叠矩阵拆分副本、浅拷贝和深拷贝高级索引通过数组进行索引通过布尔索引通过ix()函数索引排序统计排序统计NumPy是使用python进行科学计算的基础包,常用于数据分析。NumPy的主要对象是一个多维数组,该数组可以存储各种类型的数据,但在一个数组内只能存放同一个类型的数据。基础数组属性NumPy的数组对象称为ndarray,其具有以下属性:属性说明属性说明ndarray.ndi

2021-08-06 17:24:46 495 1

原创 python之数据清洗

python之数据清洗定义内容步骤实例定义对原始数据进行整理、标注,形成一份“干净”的数据,使其适合特定场景,这个过程就是数据清洗。这是一个反复的过程,在发现噪声数据后,还需要筛选出这些数据,然后根据任务需求再确定如何处理这些数据。内容数据清洗就是要去掉噪声数据,修正错误,具体包括如下几个方面:重复数据:在数据集种具有相同信息的数据。错误数据:主要是指数据集种格式错误、范围错误、包含特殊字符、包含ASCII码的数据,以及二进制、表情符号、全角、半角或其他不可识别的数据。矛盾数据:是指在数据集

2021-08-06 14:54:40 2272 1

原创 python之面向对象

python之面向对象一、基本概念二、类的封装(一)属性(二)方法三、类的继承单一继承多重继承四、类的多态一、基本概念面向对象 vs 面向过程:(1)面向过程:根据业务按顺序依次编写代码,遇到需要重用的代码,则封装成函数或方法。(2)面向对象:是模块化思想,是对事物的进一步抽象。每个对象都是一个确定的类型,并拥有该类型的所有特征和行为。面向对象有三大特征:封装、继承和多态。类 vs 对象:(1)类:类是对一类事物的抽象描述。(2)对象:是指某一个类下面的具体事物,也称为实例。例如:学

2021-08-04 17:05:49 133

原创 Python之异步处理

同步处理,也被称为是阻塞式处理,是指程序执行到某个位置,会一直等待该命令执行完毕,然后继续执行后续逻辑。异步处理,是指一段程序由多个线程或进程同时执行,从而提高软件性能。一、多线程线程是计算机调度的基本单位,一个进程至少有一个线程。线程是轻量级的,线程的启动、调度对操作系统来说所耗资源较少,所以大多数软件都涉及了多个线程来并行执行程序,从而提高运行速度。线程的调度不是认为控制的,而是由操作系统决定的,创建多线程只是为一个软件争取更多被调度到的机会。创建新线程# -*- coding: UTF-

2021-08-03 11:26:32 5702 1

原创 python之生成器、迭代器

python之生成器、迭代器一、生成器创建生成器的方法二、迭代器一、生成器使用列表推导的前提是将所有数据都存入内存,若是数据特别大,则内存消耗会很大,使用生成器可以在循环遍历列表的时候动态生成下一个元素。创建生成器的方法将列表推导式中的中括号改为小括号,如下所示:# -*- coding: UTF-8 -*-tmp_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]data = [i for i in tmp_list if i % 2 == 0]print("

2021-08-03 10:06:54 59

原创 python函数解包、高阶函数、堆栈溢出相关知识点

python函数的一些相关知识点:一、函数解包解包是降组合在一起的数据进行拆分。函数解包包括两部分:参数解包,返回值解包。参数解包:要求传入数据的个数或字典的键的个数和函数参数个数一致,若是在传参时,参数封装成列表或者元组,需要在参数前加”*“,封装成字典,需要在参数前加双星。返回值解包:等号左边的对象个数需要和函数返回值个数一致。如下所示:def func(a, b): return a + bx1 = [1, 2]y1 = func(*x1)print("y1=", y1)

2021-08-03 09:34:36 235

原创 python中列表、元组、字典的简单用法

python中list,tuple,dic的简单用法列表列表切片列表推导元组修改元组内的元素创建单元素元组创建元组字典常用内建方法列表VS元组列表列表切片切片是python中访问集合数据的高级用法,通过切片可以取得列表中指定范围内的数据,如下所示:a = list(range(10))# 生成0-9的列表print(a)print("在2-8的范围内,每隔两个取一个数字:", a[2:8:2])print("将列表反向输出:", a[::-1])print("从第8个到第一个的范围内,每隔两

2021-07-29 17:36:17 158

原创 python输出格式说明

python输出格式化符号说明格式化符号说明格式化符号说明%c转换成字符及ASCII码%o转换成无符号八进制数%s以字符串格式输出,优先使用str函数进行转换%x或%X转换成无符号十六进制数%d或%i转换成有符号十进制数%e或%E转换成科学计数法%f或%F转换成浮点数%g或%G%f(F)和%e(E)的简写%%直接输出%%u转换成无符号十进制数python输出辅助指令符号作用符号作用-左对齐0

2021-07-29 16:47:39 426

原创 python关键字

import keywordprint(keyword.kwlist)使用上述代码可以查看Python的关键字,其输出为:这里对部分关键字的含义做简要记录:关键字描述关键字描述assert断言async协程语法糖with对资源进行访问await协程语法糖is判断两个对象是否相同try用于捕获异常in判断一个对象是否在另一个对象中raise用于触发异常lambda创建匿名函数except用于捕获异常global标

2021-07-28 18:45:36 65

原创 python的内存管理与垃圾回收

python的内存管理与垃圾回收一、内存管理二、垃圾回收python是一门纯面向对象的语言,所有的变量在python中都是对象,对象是通过引用传递的,并且对象的类型和内存是在运行时确定的,由赋值号右边的类型来决定对象的类型的内存大小。一、内存管理python不需要像C/C++那样手动申请或者释放内存单元,由python解释器自动进行内存管理,其采用引用计数的方式跟踪内存中的对象状态。当对象被创建的时候,就设置一个引用计数,不再使用时,就将引用计数清零,然后再通过垃圾回收器回收。所以,python记录着

2021-07-28 17:36:12 416

原创 图或网络中的中心性

图或网络中的中心性一、点度中心性(degree centrality)计算:二、特征向量中心性(eigenvector centrality)计算:三、中介中心性(betweenness centrality)计算:四、接近中心性(closeness centrality)计算:网络由节点(node)和连接它们的边(edge)构成。例如,微信好友的关系是相互的,如果我是你的好友,你也是我的好友。这样的网络称为无向网络(undirected graph/network)。但超链接并非如此,如果我的网站可以链

2021-07-17 22:17:43 1727 2

原创 python实现字符串中的第一个唯一字符

LeetCode-字符串中的第一个唯一字符题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例一:说明:思路说明使用一个列表记录第一次出现的字母,用一个列表重复出现的字母,一个字典记录字母的下标。详见代码。欢迎大家批评指正。代码实现class Solution(object): def firstUniqChar(self, s): """ :type s: str :rtype: in

2021-07-16 18:18:31 743

转载 图神经网络的介绍

近年来,深度学习领域关于图神经网络(Graph Neural Networks,GNN)的研究热情日益高涨,图神经网络已经成为各大深度学习顶会的研究热点。GNN处理非结构化数据时的出色能力使其在网络数据分析、推荐系统、物理建模、自然语言处理和图上的组合优化问题方面都取得了新的突破。图神经网络有很多比较好的综述[1][2][3]可以参考,更多的论文可以参考清华大学整理的GNN paper list[4] 。本篇文章将从一个更直观的角度对当前经典流行的GNN网络,包括GCN、GraphSAGE、GAT、GA

2021-07-16 17:23:08 2256

原创 python实现两数之和 II - 输入有序数组

LeetCode- 有效的字母异位词题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例一:示例二:说明:思路说明题目本身不难,主要是要理解字母异位词的含义。本题目中,判断两个字符串中出现的字母是否一致,且各个字母出现的数量是否相等,两个条件都满足,则是字母异位词,否则不是。代码中使用Counter函数,来统计字符串中出现的字母以及相应的数量。详见代码。欢迎大家批评指正。代码实现class Solution(object): def i

2021-07-15 17:46:54 239

原创 python移除链表元素

LeetCode- 移除链表元素题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例一:示例二:示例三:思路说明定义一个空的链表,如果原链表上节点的值不等于val,则拼接上这个节点,否则,判断下一个节点。返回的时候返回定义链表的next,则为新链表的新的头节点。详见代码。欢迎大家批评指正。代码实现# Definition for singly-linked list.# clas

2021-07-15 17:20:36 869

原创 Python实现矩阵置零

LeetCode- 矩阵置零题目描述给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?示例一:示例二:思路说明先对原数组补一圈零,让后对原数据记录下0所在的位置,即:将此位置的bool值设置为True,再遍历填

2021-07-15 16:39:13 1923 1

原创 python填充数组

python填充数组的外围填充 matrix_pad = np.pad(matrix_arr, pad_width=((1, 1), # 向上填充1个维度,向下填充1个维度 (1, 1)), # 向左填充1个维度,向右填充1个维度 mode="constant", # 填充模式 constant_values=(0, 0) #

2021-07-15 10:50:09 1136

原创 机器学习笔记-线性模型中的过拟合、欠拟合

关于线性回归算法的欠拟合和过拟合欠拟合:采用某个算法去拟合数据时,得到的模型不能很好的拟合训练数据,使得预测效果很差,欠拟合也被称为是:高偏差。欠拟合的问题,需要我们不断尝试各种合适的算法,优化算法中的参数调整,以及通过数据预处理、数据可视化等特征工程,找过模型拟合效果最优化的结果。可以通过增加更多的特征变量,利用更高幂次的多项式当作假设函数,以该假设函数来拟合训练数据。过拟合:采用某个算法去拟合数据时,得到的模型很好的拟合了训练数据,而在预测数据上的效果很差,过拟合也被称为是:高方差。一般

2021-07-12 21:02:10 186 1

原创 python实现两个数组的交集II

LeetCode- 两个数组的交集II题目描述给定两个数组,编写一个函数来计算它们的交集。示例一:示例二:说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。思路说明详见代码。欢迎大家批评指正。代码实现class Solution(object): def intersect(self, nums1, nums2): """ :type nums1: List[int]

2021-07-10 20:44:56 519 1

原创 RNN学习笔记

一、单层网络在学习RNN之前,首先要了解一下最基本的单层网络,它的结构如图:输入是x,经过变换Wx+b和激活函数f得到输出y。相信大家对这个已经非常熟悉了。二、经典的RNN结构(N vs N)在实际应用中,我们还会遇到很多序列形的数据:如:1. 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。2. 语音处理。此时,x1、x2、x3……是每帧的声音信号。3. 时间序列问题。例如每天的股票价格等等序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题

2021-07-10 10:53:32 314

原创 python实现Excel表列名称

LeetCode- Excel表列名称题目描述给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。例如:示例一:示例二:示例三:示例四:思路说明先使用一个字典记录下1-26和A-Z的对应关系,然后将输入的列数依次取余,得到的余数再取对应位置的字母,接下来再取列数除以26的商,若商能继续除以26有余数则继续,直到整除,当商在1-26之间的时候,还要再加上商对应的字母。由以上课看出,是从余数开始逆着向前推导的,由此得到的列序号也是逆序的,最后需要反转字

2021-07-10 08:33:19 1261 2

原创 python实现求最大子序和

LeetCode- 求最大子序和题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例一:示例二:示例三:示例四:示例五:思路说明使用max_index来记录第i个下标为止,此下标位置能取到的最大值,同时使用Max_value 来记录最大子序和。分别用i,j两个下标索表示求序列和时的起始位置和终止位置,若当前位置j取到的和比本身要小,则此位置上取到的最大和为j位置的数字本身,说明j之前的数值求和会让第j个值减少,所以,将

2021-07-08 21:23:28 671

原创 python之matplotlib实现数据可视化

直方图import matplotlib.pyplot as pltimport numpy as npimport pandas as pddf = pd.read_csv(r'path.csv') # 将此处换成自己的数据路径 df.hist(xlabelsize=10, ylabelsize=10, figsize=(12, 8))plt.show()在代码中第五行,xlabelsize=10, ylabelsize=10分别表示直方图整体x,y坐标轴的尺寸,figsize=(12,

2021-07-08 20:27:07 295 3

转载 python实现缺失值处理

缺失值的处理由于各种原因,我们使用的数据集或多或少地存在着缺失值。如果直接删除缺失值,会丢失其他有价值的数据,以下是处理缺失值的几种方法。直接删除当缺失值的个数只占整体很小一部分的时候,可直接删除缺失值。但是如果缺失值占比上升,这种缺失值处理方法误差就很大了。在采用删除法处理缺失值时,需要首先检测样本总体中缺失值的个数。python中统计缺失值的方法如下:import numpy as npimport pandas as pddata = pd.read_csv('data.csv',e

2021-07-07 11:09:07 4823

转载 缺失值的处理方法

缺失值处理介绍一、造成数据缺失的原因二、数据缺失机制三、空值语义四、空值处理的重要性和复杂性五、空值处理方法的分析比较5.1 删除元组5.2 数据补齐5.2.1 人工填写(filling manually)5.2.2 特殊值填充(Treating Missing Attribute values as Special values)5.2.3 平均值填充(Mean/Mode Completer)5.2.4 热卡填充(Hot deck imputation,或就近补齐)5.2.5 K最近邻法(K-means

2021-07-07 09:48:33 4444

原创 线性回归的几种评价方法

一、平均绝对误差(MAE)即:Mean Absolute Error,是指每个样本的真实值与与预测值的差的绝对值,再求和,再求平均,其公式如下:二、均方误差(MSE)即:Mean Square Error,是指每个样本的真实值与预测值的差的平方,再求和,再求平均,其公式如下:三、均方根误差(RMSE)即:Root Mean Square Error,就是对均方误差开根号,其公式如下所示:均方根误差不同于均方误差,均方根误差的单位与所用数据的单位是相同的。...

2021-07-06 21:44:29 1456

原创 python实现多数元素

LeetCode- 多数元素题目描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例一:示例二:思路说明将列表内的数值和出现的次数存在dic_nums字典形式中,其中key为原本的数字,value为该数字出现的次数,选择出现次数大的输出。需要注意的是,列表内可能会出现只有1个数值的情况。详见代码。欢迎大家批评指正。代码实现class Solution(object):

2021-07-06 17:19:02 657

原创 python删除排序链表中的重复元素

LeetCode- 删除排序链表中的重复元素题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例一:示例二:说明:思路说明设置两个指针,p和p_next,如果p和p_next的值相等,则断开两者之间的连接,同时使p_next的指针指向下一个节点,直到p_next指向空。欢迎大家批评指正。代码实现# Definition for singly-linked list.# class

2021-07-05 21:37:57 254

原创 python实现二进制求和

LeetCode- 二进制求和题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例一:示例二:说明:思路说明第一想法是一种很简单的思路,将字符串反转,转换成list的格式,然后两个List对应位依次相加,满二进一,最后再将结果返回来,再输出。后面懂了好的方法会持续更新,欢迎大家批评指正。代码实现class Solution(object): def bi_add(self, a_list, ll):

2021-06-26 10:09:17 1183 1

原创 LeetCode-验证回文串

LeetCode-验证回文串题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例一:示例二:思路说明回文串,即:在字符串中首尾对应位置上的元素是相等的,题目中给出了只考虑数字和字目,且不考虑字母大小写,所以在判断一个字符串时,我们首先提取其中的字母和数字这两类有效元素,然后一个下标指向第一个元素,另一个下标指向最后一个元素,元素相同则比较下一对元素,不同则返回False,l另外,空字符串当成回文串来处理

2021-06-24 16:37:27 93

原创 LeetCode-杨辉三角II

LeetCode-杨辉三角II题目描述给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:思路说明每一行的数字个数就是所在行数,每一行的数据中首尾两个数是1,同时上一行中相邻两个数字的和就是下一行中的中间数字,而numRows为1或者为2时是特例,所以numRows为1时,返回[[1]],numRows为2时,返回[[1],[1,1]];而当numRows大于2时,先计算上一行两两之和,然后计算当前数据时,先加1,再拼接上上

2021-06-24 16:05:20 69

原创 LeetCode-好数对的数目

LeetCode-好数对的数目题目描述给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例一:示例二:示例三:提示:思路说明题目要求找出好数对,即:两两相等的的个数,最简单的方法就是遍历这个列表,然后基于当前遍历的对象,在列表的后面查找此对象出现的次数,然后遍历求和,即为所求。欢迎大家批评指正。代码实现class Solution(object):

2021-06-24 16:00:22 126

原创 LeetCode-杨辉三角

LeetCode-杨辉三角题目描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:思路说明每一行的数字个数就是所在行数,每一行的数据中首尾两个数是1,同时上一行中相邻两个数字的和就是下一行中的中间数字,而numRows为1或者为2时是特例,所以numRows为1时,返回[[1]],numRows为2时,返回[[1],[1,1]];而当numRows大于2时,先计算上一行两两之和,然后计算当前数据时,先加1,再拼接上上

2021-06-22 21:32:46 94

原创 LeetCode-链表中倒数第K个节点

LeetCode-链表中倒数第K个节点题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:思路说明首先遍历链表得到链表长度,然后用链表长度减去k的值,即为从头遍历时需要停止的位置,需要注意的是,返回的不是倒数第k个节点的值,而是倒数第k个节点之后的所有节点,代码如下。欢迎大家批评指正。

2021-06-21 17:19:01 95

原创 机器学习笔记——决策树

决策树工作原理:令:k是一个重要参数,k不同时,产生的结果也会有很多不同。采用不同的距离计算公式,也会产生不同的结果。优缺点:优点:缺点:一般流程:收集数据:可以使用任何方法。准备数据;树构造算法只适用于标称型数据,因此数值型数据必须离散化。分析数据:可以使用任何方法,构造树完成之后,应该检查图形是否符合预期。训练算法:构造树的数据结构。测试算法:使用经验树计算错误率。使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。简单实现

2021-06-20 20:26:47 406

原创 LeetCode-合并排序的数组

LeetCode-合并排序的数组题目描述给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:说明:思路说明题目中已经说明了,A数组的长度可以同时容纳下A和B,且A、B都是有序数组,那么自然而然想到的就是,分别从A、B当前存储元素的长度下标开始,从后往前遍历,依次比较大小,大的放入A的最大长度下标位置,然后下标递减。需要注意的是,可能最后A中的元素都往后移动了,而B中的

2021-06-20 18:36:42 192

原创 LeetCode-加一

LeetCode-加一题目描述给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头示例一:示例二:示例三:提示:思路说明我使用了很简单粗暴的方法,首先以列表长度为依据,若只有一个数字则直接加一判断,若有多个数字则以数字长度和是否进位同时作为判断条件。需要注意的是类似于9,99,999这样的数字,要考虑list长度,防止下标越界。欢迎大家在评论区提供更好的

2021-06-19 16:29:49 50

原创 LeetCode-数组中重复的数字

LeetCode-数组中重复的数字题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例:思路说明使用字典来记录每个数字出现的次数,以list中的各个值作为key,出现次数作为value,当第二次出现时则返回这个数字。当然,本题给出的数值范围是在[0,n-1],也可以使用哈希的方式来做。代码实现class Solution(o

2021-06-18 17:27:59 83

原创 机器学习笔记-K近邻算法

k-近邻算法(kNN)工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每—数据与所属分类的对应关系。测试阶段:输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。k-近邻算法的一般流程:(1)收集数

2021-06-11 08:49:58 82

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除