当前位置:首页>python>《Python 从入门到精通》106|排序、去重、统计:基础数据分析三板斧

《Python 从入门到精通》106|排序、去重、统计:基础数据分析三板斧

  • 2026-07-09 13:10:16
《Python 从入门到精通》106|排序、去重、统计:基础数据分析三板斧

前面几章,我们已经讲了 JSON、正则、时间处理。

你会发现,数据处理这件事,到这里已经越来越像真实工作了。

先从接口里把数据拿出来。 再从文本里把关键信息提取出来。 再把时间字段转成程序能理解的形式。

可光做到这里,还不够。

因为大多数时候,数据拿到手之后,你并不是立刻就结束了。 你通常还要继续做三类动作:

把数据按某种规则排一排 把重复内容清一清 把关键结果算一算

这三件事,看起来基础,实际上特别高频。

做成绩统计时,要按分数排序。 做用户数据清洗时,要把重复手机号去掉。 做销售分析时,要统计总数、平均值、最大值。 做日志分析时,要统计某个错误出现了多少次。 做商品数据整理时,要按价格从低到高排好。

所以这一章讲的内容,虽然不花哨,但非常重要。

如果说前面几章是在教你把数据拿进来,那么这一章开始,就是在教你怎么把数据变得更有价值。

排序、去重、统计,这三件事,几乎就是基础数据分析的三板斧。


一、为什么这三件事几乎所有项目都会遇到

很多初学者会有一个误区。 觉得数据分析好像是专门做报表的人才需要学的。

其实不是。

只要你在处理数据,不管你是不是做专业分析,排序、去重、统计都会反复出现。

比如你做一个通讯录程序。 你要按姓名排序,按拼音排序,按最近联系时间排序。

比如你做一个爬虫。 你抓下来 1000 个链接,可能里面有很多重复项。 你得先去重。

比如你做一个学生成绩系统。 你要统计总人数、及格人数、平均分、最高分、最低分。

你会发现,这三件事不是某个特定方向才会用,而是各种方向都会碰到。

换句话说,真正的数据处理,很多时候不是高深算法。 而是把这些基础动作做扎实。

谁把这些基本功练熟了,谁后面做项目就会更顺。


二、先建立一个很重要的意识:数据拿到手,不等于有价值

假设你抓到了一批商品价格:

prices = [199992999915919989]

这串数据拿到了吗。 拿到了。

但它现在有多大价值,其实很有限。

因为它还是原始状态。

你一眼很难看出:

最便宜的是多少 最贵的是多少 一共有多少条 有没有重复值 平均价格是多少 按从低到高排是什么样

也就是说,原始数据只是材料。 真正的信息,要靠后续处理提炼出来。

而排序、去重、统计,恰恰就是最常见的提炼方式。

所以从这一章开始,你要慢慢养成一个习惯: 看到一组数据时,不要只想着把它打印出来。 而要开始问自己:

它能不能排一下 它有没有重复 它能统计出什么结果

这个意识一建立,数据处理能力就会明显往前走一步。


三、排序到底是在解决什么问题

排序这件事看起来很普通,但它的作用非常大。

因为数据一旦没有顺序,人就很难快速看出规律。

比如下面这组成绩:

scores = [789563889170]

如果不排序,它只是一些散乱数字。

但如果排完序:

[637078889195]

你一下子就能看出最低分、最高分、分布情况。

这就是排序最直接的价值: 让混乱的数据变得有秩序。

现实开发里,排序的用途非常多。

按价格从低到高展示商品 按时间从新到旧展示日志 按销量从高到低展示排行榜 按成绩从高到低输出名次 按文件大小排序,找出最大的几个文件

所以排序不是为了好看。 而是为了更容易观察、更容易比较、更容易决策。


四、Python 里最常见的排序方法有两个

学排序,先记住两个最常用的方式就够了:

sorted()list.sort()

它们都能完成排序,但用法和特点不一样。

先看 sorted()

nums = [52917]result = sorted(nums)print(nums)print(result)

输出:

[52917][12579]

这里要注意,sorted() 不会修改原列表。 它会返回一个新的排好序的结果。

再看 sort()

nums = [52917]nums.sort()print(nums)

输出:

[12579]

这次原列表本身被改掉了。

所以你可以这样记:

sorted() 产生新结果,不动原数据sort() 直接修改原列表

这个区别非常重要。 后面做真实项目时,经常会影响程序逻辑。


五、什么时候该用 sorted,什么时候该用 sort

这个问题很实际。

如果你只是想临时得到一个排序结果,同时还想保留原始数据,那就更适合用 sorted()

比如:

scores = [78956388]sorted_scores = sorted(scores)print("原数据:", scores)print("排序后:", sorted_scores)

原数据不会丢。

但如果你本来就希望把这个列表直接重新整理成有序状态,那用 sort() 会更直接。

比如:

scores = [78956388]scores.sort()print(scores)

这时候原列表就变了。

对于初学者来说,一个很实用的建议是: 刚开始更推荐多用 sorted()

因为它更安全。 你不容易在不知不觉中把原数据改掉。

等你对列表可变性更熟了,再根据场景选择 sort() 也不迟。


六、升序和降序怎么控制

默认情况下,Python 排序是升序。

也就是从小到大,从低到高,从早到晚。

例如:

nums = [52917]print(sorted(nums))

输出:

[12579]

如果你想改成降序,可以加上 reverse=True

nums = [52917]print(sorted(nums, reverse=True))

输出:

[97521]

这在排行榜、成绩排序、销量排序里非常常见。

比如按成绩从高到低:

scores = [7895638891]print(sorted(scores, reverse=True))

输出:

[9591887863]

这就是排行榜的基本雏形。

所以排序时,你要先问自己一句: 我到底想看最小的排前面,还是最大的排前面

这个方向意识很重要。


七、不只是数字,字符串也能排序

很多人一提排序,就只想到数字。 其实字符串同样可以排。

例如:

names = ["Tom""Alice""Jack""Bob"]print(sorted(names))

输出:

['Alice''Bob''Jack''Tom']

它本质上是按字母顺序排的。

中文字符串也可以排,但默认规则主要是按字符编码来处理。 对于初学阶段来说,你先知道它能排就够了。

再看一个更贴近业务的例子:

cities = ["上海""北京""广州""深圳"]print(sorted(cities))

它也会得到一个稳定的排序结果。

不过这里要提醒你,中文排序如果涉及拼音顺序、首字母顺序、复杂规则,后面通常需要借助更专门的处理方式。 但在当前阶段,我们先掌握基础排序思路即可。


八、真正有价值的排序,往往不是排简单数字,而是排复杂数据

真实开发里,很多数据不是一个纯数字列表,而是一组字典、元组、对象。

比如学生成绩数据:

students = [    {"name""张三""score"85},    {"name""李四""score"92},    {"name""王五""score"78}]

这时候你不是想直接比较整个字典。 你真正想要的是: 按字典里的某个字段排序。

比如按分数排序。

这时就要用到 key

students = [    {"name""张三""score"85},    {"name""李四""score"92},    {"name""王五""score"78}]result = sorted(students, key=lambda x: x["score"])print(result)

输出:

[    {'name''王五''score'78},    {'name''张三''score'85},    {'name''李四''score'92}]

如果想按分数从高到低:

result = sorted(students, key=lambda x: x["score"], reverse=True)print(result)

输出:

[    {'name''李四''score'92},    {'name''张三''score'85},    {'name''王五''score'78}]

这类写法非常常见。

商品列表按价格排序 员工列表按工资排序 订单列表按创建时间排序 文章列表按阅读量排序

后面你会越来越频繁地见到 key= 这个参数。


九、key 到底该怎么理解

很多人第一次看到 key=lambda x: x["score"] 会有点晕。

其实你不用把它想得太玄乎。

key 的意思可以简单理解成: 排序时,拿什么作为比较依据

比如这组学生字典:

{"name""张三""score"85}

如果不告诉 Python 比较什么,它不知道该怎么比字典。

但你一旦写上:

key=lambda x: x["score"]

意思就是: 每条数据都拿它的 score 字段出来参与排序。

如果写成:

key=lambda x: x["name"]

那就是按姓名排序。

例如:

students = [    {"name""张三""score"85},    {"name""李四""score"92},    {"name""王五""score"78}]result = sorted(students, key=lambda x: x["name"])print(result)

你会得到按姓名规则排列的结果。

所以 key 的本质不是一种神秘语法。 它只是告诉排序函数: 你要看哪一部分

这个思路非常重要。


十、去重又是在解决什么问题

接下来讲第二板斧:去重。

排序是在整理顺序。 去重是在清理冗余。

现实数据里,重复内容非常常见。

爬虫抓下来的链接可能重复 用户名单里手机号可能重复 日志里某类错误可能重复出现 商品列表里某个商品可能抓了两遍 Excel 表格里某些行可能录入重复

如果不去重,数据就会显得很乱,统计结果也容易失真。

比如一份用户名单里,同一个人出现两次,那人数统计就不准了。 一批商品链接里有大量重复,你后面爬取时就浪费时间。 一个邮箱列表不去重,发通知时就可能给同一个人发多遍。

所以去重的意义不是单纯让列表变短。 而是让后续分析、统计、处理更可靠。


十一、最简单的去重方式:set

Python 里最基础的去重方式,就是集合 set

因为集合有一个非常重要的特点: 元素不能重复

例如:

nums = [12234445]result = set(nums)print(result)print(type(result))

输出可能是:

{12345}<class 'set'>

这说明重复数字被自动去掉了。

如果你还想把结果变回列表,可以再转一次:

nums = [12234445]unique_nums = list(set(nums))print(unique_nums)

这就是最常见的基础去重写法。

它很短,也很方便。


十二、为什么很多人去重后会觉得结果怪怪的

因为 set 去重虽然方便,但有个很重要的特点:

它不保证原来的顺序

例如:

names = ["张三""李四""张三""王五""李四"]print(list(set(names)))

输出结果里的元素顺序,可能和原列表不一致。

这对某些场景没问题。 比如你只是想知道总共有哪几个唯一值。

但如果你的业务对顺序敏感,这种方法就不够稳妥了。

比如:

评论列表本来按时间顺序排列 你去重后还希望保留第一次出现的顺序 这时候直接 set 就可能打乱原顺序

所以你要记住:

set 适合快速去重 但不适合要求保留原顺序的场景

这个区别很重要。


十三、既想去重,又想保留原顺序,怎么办

这是实战里很常见的需求。

比如有这样一组数据:

names = ["张三""李四""张三""王五""李四""赵六"]

你想去重后得到:

["张三""李四""王五""赵六"]

也就是说,只保留第一次出现的顺序。

一个常见写法是自己维护一个结果列表:

names = ["张三""李四""张三""王五""李四""赵六"]result = []for name in names:if name notin result:        result.append(name)print(result)

输出:

['张三''李四''王五''赵六']

这个方法虽然不如 set 一行那么短,但它更符合很多真实业务需要。

因为顺序被保住了。

这也是一个很值得你体会的点: 不是代码越短越好。 而是越符合场景越好。


十四、复杂数据去重,往往没那么简单

如果数据是数字、字符串,去重相对简单。

但如果你面对的是字典列表,就不能直接 set() 了。

例如:

users = [    {"name""张三""phone""13800000001"},    {"name""李四""phone""13800000002"},    {"name""王五""phone""13800000001"}]

这里你真正想去重的依据,可能是手机号,而不是整个字典。

因为字典内容不同,不代表不是重复用户。 有可能只是名字写法不一样,但手机号相同。

这时你要先明确: 到底按什么去重

比如按手机号去重,可以这样写:

users = [    {"name""张三""phone""13800000001"},    {"name""李四""phone""13800000002"},    {"name""王五""phone""13800000001"}]seen = set()result = []for user in users:    phone = user["phone"]if phone notin seen:        seen.add(phone)        result.append(user)print(result)

输出:

[    {'name''张三''phone''13800000001'},    {'name''李四''phone''13800000002'}]

这种写法很常见。

也特别能说明一个问题: 去重不是机械地删重复,而是先定义重复标准。

这才是真实数据处理的思维。


十五、统计又是在解决什么问题

前面排序是整理顺序,去重是清理重复。

那统计,就是把数据进一步变成结论。

例如:

一共多少条 最大值是多少 最小值是多少 总和是多少 平均值是多少 每个类别分别出现多少次

这些都属于统计。

而统计之所以重要,是因为程序最终往往不是只要原始数据,而是要一个能支撑决策的结果。

比如销售系统里,老板不一定关心每一笔订单明细。 他更关心今天总销售额是多少,平均客单价是多少,哪个商品卖得最多。

比如学生成绩系统里,老师不一定只想看分数列表。 他更想知道平均分、及格人数、最高分是谁。

所以统计的本质,是从一堆数据里提炼出摘要信息。


十六、最基础的统计函数,先掌握这些就很够用

Python 本身已经给了我们很多好用的基础统计工具。

比如:

len() 看数量sum() 求总和max() 求最大值min() 求最小值

先看一个例子:

scores = [7895638891]print("人数:", len(scores))print("总分:", sum(scores))print("最高分:", max(scores))print("最低分:", min(scores))

输出:

人数: 5总分: 415最高分: 95最低分: 63

这几个函数看起来简单,但真的特别常用。

很多实际业务逻辑,都是从这些最基础的统计开始的。

所以别因为它们简单就小看它们。 真正高频的能力,往往就是这些基础动作。


十七、平均值怎么计算

平均值本身没有单独的内置函数,但计算很简单:

总和 ÷ 数量

例如:

scores = [7895638891]average = sum(scores) / len(scores)print("平均分:", average)

输出:

平均分: 83.0

如果你想保留两位小数,可以这样写:

scores = [7895638891]average = sum(scores) / len(scores)print(f"平均分:{average:.2f}")

输出:

平均分:83.00

平均值是各种分析里都特别常见的一项。 平均成绩、平均价格、平均耗时、平均访问量,几乎处处都有。

所以这个公式虽然简单,但一定要熟。


十八、如果数据为空,统计时要注意什么

这是实战里非常关键的一点。

比如一个列表是空的:

scores = []

这时候:

len(scores) 没问题 但 sum(scores) / len(scores) 就会出错max(scores) 和 min(scores) 也会出错

因为空列表没有最大值、最小值,而且数量是 0,不能直接做除法。

所以更稳妥的写法应该是先判断:

scores = []if scores:    average = sum(scores) / len(scores)    print("平均分:", average)    print("最高分:", max(scores))    print("最低分:", min(scores))else:    print("当前没有数据")

这个细节非常值得你记住。

真实业务里,空数据是很常见的。 别总默认数据一定存在。

会处理空数据的人,代码通常更稳。


十九、统计某个值出现了多少次

有时候我们关心的不是总和和平均值,而是频率。

比如:

某个成绩出现了几次 某个错误日志出现了几次 某个单词在文本里出现了几次 某个城市在用户列表里出现了几次

如果只是统计某一个值出现次数,可以直接用 count()

例如:

nums = [1223245]print(nums.count(2))

输出:

3

再比如:

cities = ["北京""上海""北京""广州""北京"]print(cities.count("北京"))

输出:

3

这个方法非常直观,适合做单个值的频次统计。


二十、如果要统计所有元素的出现次数,怎么办

如果你想统计整个列表里每个元素分别出现了多少次,单靠 count() 一个个查会比较麻烦。

这时候就很适合用 collections 模块里的 Counter

例如:

from collections import Countercities = ["北京""上海""北京""广州""北京""上海"]result = Counter(cities)print(result)

输出大致是:

Counter({'北京'3'上海'2'广州'1})

你可以把它理解成一种专门做计数的字典。

它特别适合这种频次统计场景。

比如统计日志级别:

from collections import Counterlevels = ["INFO""ERROR""INFO""WARNING""ERROR""ERROR"]result = Counter(levels)print(result)

输出:

Counter({'ERROR'3'INFO'2'WARNING'1})

这在日志分析、词频统计、用户标签统计里都特别常用。


二十一、Counter 不只是统计,还能直接找出最常见的内容

这是 Counter 很好用的一个地方。

比如你想知道,出现次数最多的前两个元素是什么,可以用 most_common()

from collections import Counterwords = ["python""java""python""c""python""java"]result = Counter(words)print(result.most_common(2))

输出:

[('python'3), ('java'2)]

这个功能在很多场景里都非常有价值。

比如:

评论里出现最多的关键词 日志中最常见的错误类型 销售数据里最常卖的商品 用户最常来自哪个城市

你看,很多看起来像小型分析报告的东西,底层就是这么来的。


二十二、把排序、去重、统计放到一个小例子里,你会更容易看懂

假设现在有一组商品价格数据:

prices = [199992999915919989299129]

我们来一步一步处理。

先排序:

prices = [199992999915919989299129]sorted_prices = sorted(prices)print("排序后:", sorted_prices)

输出:

排序后: [899999129159199199299299]

再去重:

unique_prices = sorted(set(prices))print("去重后:", unique_prices)

输出:

去重后: [8999129159199299]

再统计:

print("总数量:", len(prices))print("不同价格有几种:", len(set(prices)))print("最高价:", max(prices))print("最低价:", min(prices))print("平均价:", sum(prices) / len(prices))

你会发现,一组原本很普通的数据,经过这几步处理后,立刻就有信息量了。

这就是三板斧的力量。


二十三、再看一个更贴近业务的数据案例:学生成绩分析

现在我们来做一个更像真实项目的小案例。

students = [    {"name""张三""score"85},    {"name""李四""score"92},    {"name""王五""score"78},    {"name""赵六""score"92},    {"name""小刘""score"66}]

第一步,按成绩从高到低排序:

sorted_students = sorted(students, key=lambda x: x["score"], reverse=True)print(sorted_students)

第二步,统计平均分、最高分、最低分:

scores = [student["score"for student in students]print("人数:", len(scores))print("平均分:", sum(scores) / len(scores))print("最高分:", max(scores))print("最低分:", min(scores))

第三步,统计及格人数:

pass_count = 0for score in scores:if score >= 60:        pass_count += 1print("及格人数:", pass_count)

第四步,找出最高分学生:

top_score = max(scores)for student in students:if student["score"] == top_score:        print("最高分学生:", student["name"], student["score"])

这个例子特别值得你慢慢体会。

因为这已经很接近一个简单成绩分析程序了。

而它背后的核心动作,并不复杂。 本质上仍然是排序、统计、筛选。

这说明什么

说明很多“看起来像分析”的事情,并不是一定要靠复杂库才能做。 你用 Python 基础能力就已经能做出不少东西。


二十四、列表推导式会让统计写法更顺手

到了这里,你会发现一个很自然的需求。

比如我们想从学生数据里拿出所有分数:

scores = [student["score"for student in students]

这其实就是列表推导式在数据处理里的典型用法。

它会让你做统计时特别顺手。

再比如,只拿及格分数:

pass_scores = [student["score"for student in students if student["score"] >= 60]

或者只拿学生姓名:

names = [student["name"for student in students]

所以你会发现,前面学过的推导式,到这一章就开始越来越有用了。

真正有价值的知识点,不是学完就结束。 而是会在后面的场景里不断复用。


二十五、排序、去重、统计,很多时候是连着出现的

真实工作里,这三件事通常不是分开的,而是串在一起。

例如处理用户注册数据时:

先按注册时间排序 再按手机号去重 最后统计每天新增人数

例如处理商品数据时:

先按商品编号去重 再按价格排序 最后统计均价和最高价

例如处理日志时:

先把重复错误去掉 再按时间排序 最后统计每种错误出现次数

所以你不要把这一章理解成三个孤立的小功能。 它们其实经常是一个连续流程。

谁能把这三步串起来,谁就已经具备了基础数据分析的雏形。


二十六、看一个完整一点的小案例:整理一份订单金额数据

假设你现在拿到了一批订单金额:

orders = [99199992991591998929912989]

现在你希望完成下面几件事:

按金额从低到高排序 去掉重复金额 统计订单总数 统计总金额 统计平均金额 统计每个金额分别出现几次

代码可以这样写:

from collections import Counterorders = [99199992991591998929912989]sorted_orders = sorted(orders)unique_orders = sorted(set(orders))total_count = len(orders)total_amount = sum(orders)average_amount = total_amount / total_countamount_count = Counter(orders)print("排序后:", sorted_orders)print("去重后:", unique_orders)print("订单总数:", total_count)print("订单总金额:", total_amount)print("平均订单金额:", average_amount)print("各金额出现次数:", amount_count)

输出结果会非常清晰。

这个例子虽然不长,但已经有一点“小分析脚本”的味道了。

而你仔细看,会发现核心依然是这一章讲的内容。


二十七、学到这里,你应该开始具备一种分析意识

这一点比语法本身更重要。

以前你拿到一组数据,可能只是想: 怎么把它打印出来

现在你要慢慢升级成: 怎么从这组数据里看出规律

排序,是为了看顺序和大小关系。 去重,是为了看真实唯一值。 统计,是为了看整体分布和概要结果。

这其实已经是数据分析最基本的思维了。

很多人学 Python 学了一段时间之后,依然停留在“会写代码”的阶段。 而真正能把代码用起来的人,往往会在这里发生变化。

因为他不再满足于程序能跑。 他开始关心: 程序能不能帮我把数据说清楚

这就是很重要的一步。


二十八、初学者在这一章最容易踩的坑

第一个坑,是分不清 sorted() 和 sort()

前者返回新列表,后者修改原列表。 这个一定要分清。

第二个坑,是用 set() 去重后,发现顺序乱了,却不知道为什么。

因为集合本来就不保证原顺序。

第三个坑,是统计平均值时忘了处理空列表。

结果一除以 0 就报错。

第四个坑,是面对字典列表时,不知道该按哪个字段排序、按哪个字段去重。

这时候你要记住,先问自己: 我的比较依据是什么 我的重复标准是什么

第五个坑,是只会算数字,不会结合业务含义。

比如算出了平均分,却不知道还要看及格率。 算出了商品数量,却没想到还要统计不同商品数。 所以别只盯着函数,得盯着问题本身。


二十九、给你一个特别实用的写代码建议

以后只要拿到一批数据,你都可以先做一个小检查。

先看看数量 再看看有没有重复 再看看排完序是什么样 最后想想能统计出什么指标

这个习惯非常好用。

比如:

data = [199992999915919989]print("原始数据:", data)print("数量:", len(data))print("去重后数量:", len(set(data)))print("排序后:", sorted(data))print("最大值:", max(data))print("最小值:", min(data))print("平均值:", sum(data) / len(data))

你会发现,很多数据一旦做完这几步,轮廓一下子就清楚了。

这其实就是最朴素的分析习惯。


三十、这一章真正要学会的,不只是几个函数,而是一个处理套路

到这里,你应该能感觉到,这一章虽然讲的都是基础操作,但它们已经开始形成一个套路了。

当你拿到数据时,先问: 要不要排序

当你发现重复时,接着问: 要不要去重,去重标准是什么,顺序要不要保留

当你想提炼结论时,再问: 要统计总量、均值、最大值,还是频次分布

只要这个套路建立起来,你以后面对很多数据题、练习题、项目需求,思路都会清楚很多。

这比单纯背会 sortedsetCounter 的名字更重要。

因为真正做项目时,没有人会告诉你应该用哪个函数。 你得自己识别问题。

而这一章训练的,恰恰就是这种识别能力。


本章小结

排序、去重、统计,是最基础也最常见的数据处理三板斧。

排序让数据更有秩序,方便观察大小规律。 去重让数据更干净,避免重复带来的误判。 统计让数据从原始记录变成可读结论。

这一章最常用的工具包括:

sorted() 和 sort() 用来排序set() 用来快速去重len()sum()max()min() 用来做基础统计count() 和 Counter 用来统计出现次数

更重要的是,你要开始建立一种新的意识:

拿到数据之后,不只是把它存起来、打印出来。 而是要试着把它排一排、清一清、算一算。

当你开始这样处理数据时,你的 Python 就已经不只是会写,而是在真正发挥作用了。


课后练习

你可以自己动手练这几个小题,效果会特别明显。

第一,准备一组成绩数据,分别输出升序结果、降序结果、最高分、最低分和平均分。

第二,准备一组带重复的用户名,分别用 set 去重,和用循环保序去重,观察结果差异。

第三,准备一组城市列表,统计每个城市分别出现了多少次,并找出出现次数最多的城市。

第四,准备一个学生字典列表,按分数从高到低排序,再统计及格人数和平均分。

第五,把一组商品价格数据先去重,再排序,最后统计不同价格一共有几种。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-10 16:18:49 HTTP/2.0 GET : https://f.mffb.com.cn/a/503889.html
  2. 运行时间 : 0.232617s [ 吞吐率:4.30req/s ] 内存消耗:4,837.70kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d78baa169b0529a65a8856e29a629114
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001113s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001569s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000727s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000607s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001122s ]
  6. SELECT * FROM `set` [ RunTime:0.000537s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001317s ]
  8. SELECT * FROM `article` WHERE `id` = 503889 LIMIT 1 [ RunTime:0.001099s ]
  9. UPDATE `article` SET `lasttime` = 1783671529 WHERE `id` = 503889 [ RunTime:0.014320s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000614s ]
  11. SELECT * FROM `article` WHERE `id` < 503889 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001229s ]
  12. SELECT * FROM `article` WHERE `id` > 503889 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001132s ]
  13. SELECT * FROM `article` WHERE `id` < 503889 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.022302s ]
  14. SELECT * FROM `article` WHERE `id` < 503889 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003731s ]
  15. SELECT * FROM `article` WHERE `id` < 503889 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011841s ]
0.234304s