news 2026/7/5 14:01:57

Python 里的 `‘‘.join(sorted(s))` 到底是什么意思?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 里的 `‘‘.join(sorted(s))` 到底是什么意思?

刷 LeetCode 的时候,经常会看到这样一行代码:

key=''.join(sorted(s))

第一次看到这行代码,很多人都会愣一下:

“这什么东西?空字符串、join、sorted,怎么还三件套组合技?”

别急,这行代码其实不难。它的作用一句话概括就是:

把字符串里的字符按顺序排序,然后重新拼成一个新的字符串。


一、先看一个例子

假设有一个字符串:

s="eat"

执行:

key=''.join(sorted(s))

最后得到:

key="aet"

也就是说,"eat"被重新排序成了"aet"


二、拆开来看

这行代码可以拆成两步:

sorted(s)

和:

''.join(...)

三、第一步:sorted(s)

sorted()的作用是排序。

如果:

s="eat"

那么:

sorted(s)

结果是:

['a','e','t']

注意,这里有一个很关键的点:

sorted(s)返回的是列表,不是字符串。

也就是说,它不是返回:

"aet"

而是返回:

['a','e','t']

Python 的意思大概是:

“我已经帮你排好队了,但我先按列表形式给你。”


四、第二步:''.join(...)

既然sorted(s)返回的是列表,那我们就要把这个列表重新拼成字符串。

这时候就要用:

''.join(['a','e','t'])

结果是:

"aet"

这里的''是空字符串,表示字符之间不加任何东西,直接拼接。

比如:

''.join(['a','e','t'])

得到:

"aet"

如果你写成:

'-'.join(['a','e','t'])

得到的就是:

"a-e-t"

如果你写成:

' '.join(['a','e','t'])

得到的就是:

"a e t"

所以:

''.join(...)

意思就是:用空字符串把里面的字符连接起来。


五、完整过程

还是看这个例子:

s="eat"key=''.join(sorted(s))

执行过程是:

sorted("eat")

得到:

['a','e','t']

然后:

''.join(['a','e','t'])

得到:

"aet"

所以最终:

key="aet"

六、它在字母异位词分组里有什么用?

在“字母异位词分组”这道题里,这行代码非常关键。

所谓字母异位词,就是几个字符串使用的字母完全一样,只是顺序不同。

比如:

"eat""tea""ate"

这三个字符串就是字母异位词。

它们原本长得不一样:

eat tea ate

但是一排序,全都变成:

"aet"

代码验证一下:

print(''.join(sorted("eat")))print(''.join(sorted("tea")))print(''.join(sorted("ate")))

输出:

aet aet aet

这就说明,它们可以用同一个key表示。


七、为什么可以用它作为字典的 key?

字典分组时,我们需要一个“统一标识”。

比如:

groups[key].append(s)

如果:

s="eat"

那么:

key="aet"

于是:

groups["aet"].append("eat")

如果:

s="tea"

排序后:

key="aet"

于是:

groups["aet"].append("tea")

如果:

s="ate"

排序后还是:

key="aet"

于是:

groups["aet"].append("ate")

最后就会得到:

{"aet":["eat","tea","ate"]}

这就是字母异位词分组的核心思想。


八、再看完整代码

importcollectionsfromtypingimportListclassSolution:defgroupAnagrams(self,strs:List[str])->List[List[str]]:groups=collections.defaultdict(list)forsinstrs:key=''.join(sorted(s))groups[key].append(s)returnlist(groups.values())

其中最核心的一句就是:

key=''.join(sorted(s))

它负责把不同顺序的字母异位词变成同一个标准形式。


九、容易误解的地方

误解一:sorted(s)会直接返回字符串

不会。

sorted("eat")

返回的是:

['a','e','t']

所以才需要:

''.join(...)

误解二:join是随便用的

join只能拼接字符串序列。

比如下面这样是可以的:

''.join(['a','e','t'])

但如果列表里是数字:

''.join([1,2,3])

会报错。

因为数字不能直接被join拼接,必须先转成字符串。


误解三:''没意义

这里的''很重要。

它表示用什么东西把字符连接起来。

''.join(['a','e','t'])

结果是:

"aet"
'-'.join(['a','e','t'])

结果是:

"a-e-t"

所以''不是摆设,它决定了拼接时中间加什么。


十、总结

key=''.join(sorted(s))

可以拆成两步理解:

第一步:

sorted(s)

把字符串里的字符排序,得到字符列表。

第二步:

''.join(...)

把字符列表重新拼成字符串。

所以:

''.join(sorted("eat"))

结果是:

"aet"

它常用于字母异位词分组,因为:

"eat"->"aet""tea"->"aet""ate"->"aet"

不同顺序的单词,排序后会变成同一个字符串。

一句话记住:

''.join(sorted(s))就是把字符串变成“按字母排序后的标准形态”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 14:01:38

别再瞎更新了!用数据可视化把账号做起来(实验7-3)

一、实验目的本实验基于实验7-1和实验7-2输出的数据表,使用助睿BI完成多维度可视化探索。实验重点是通过指标卡、排名图、标题影响分析图和趋势图,对自媒体作品运营效果进行展示与解释,并最终形成综合仪表盘。本实验使用三张数据表构建数据集…

作者头像 李华
网站建设 2026/7/5 14:00:49

数据操作+数据预处理

数据 1.张量(tensor) 其实就是n维数组,在PyTorch和TensorFlow中张量类为Tensor,是深度学习主要的数据结构。 0维——标量 1维——向量 2维——矩阵,每一行表示一个样本,每一列表示特征 3维——图片&#xf…

作者头像 李华
网站建设 2026/7/5 14:00:13

一键部署言埠 YanPub Docker:万言归埠,一站集成。Adapter Quality CI中文编程语言统一基础设施。一个框架,接入任意中文语言,即刻获得完整工具链。

言埠 YanPub 万言归埠,一站集成。 中文编程语言统一基础设施。一个框架,接入任意中文语言,即刻获得完整工具链。 AtomGit - 全球开发者的开源社区,开源代码托管平台 Docker 一键部署 从 gitcode 拿到 yanpub 后,三步即可启动含 …

作者头像 李华
网站建设 2026/7/5 13:58:12

VLA-Adapter论文解读(五):实验分析

论文链接:[2509.09372] VLA-Adapter: An Effective Paradigm for Tiny-Scale Vision-Language-Action Model 项目主页:VLA-Adapter 前言:本文拆解了VLA-Adapter实验的研究方法论和架构设计,覆盖了模拟基准测试、消融实验、真实机…

作者头像 李华
网站建设 2026/7/5 13:57:29

Python sort函数参数藏大招!用错它,你的代码直接废了

排序这个操作作为其中的一个基本操作, 该语言给出了两种主要的数据排序办法: sort()以及(), 虽说两者都是用以按特定顺序去排列数据, 然而它们展开工作的方式存在稍许不同, 且应用于不一样的场景, 弄明白sort(&#xf…

作者头像 李华
网站建设 2026/7/5 13:57:19

Java程序设计(第3版)第四章——静态代码块

#静态代码块 1.static可以用于修饰初始化代码块 2.初始化代码块(动态代码块) 3.位置:定义在类以内,方法以外的{} 4.作用:创建对象时,按照和属性定义的先后顺序完成属性的初始化工作 5.静态代码块:被static修饰符的初始化代码块称为…

作者头像 李华