作者:Python进阶者

来源:Python爬虫与数据挖掘

一、前言

偶然的一次机会,在隔壁群看到一个粉丝问了一道Python实现排列组合基础问题,拿到Python白银交流群问了一下,下图是他的需求:

写一句话让你快速记住一个词(我想从中取3个词)(1)

很明显是个排列组合的问题,直接计算组合结果:C(10,3)=(10×9×8)/(3×2×1)=720/6 =120,答案是120。

二、实现过程

这里【瑜亮老师】直接给了一个代码,如下所示。

from itertools import combinations word = ['鲁班七号', '鲁班', '鲁班大师', '甄姬', '安琪拉', '王昭君', '韩信', '孙悟空', '程咬金', '猪八戒'] res = [i for i in combinations(word, 3)] print(res) print(len(res))

运行结果如下图所示:

写一句话让你快速记住一个词(我想从中取3个词)(2)

可以看到运行的结果最后得到的也是120,和手动计算的一致。

后来【const GF = null】自己也给了一个代码,如下图所示:

写一句话让你快速记住一个词(我想从中取3个词)(3)

这个方法也不错,不过需要提前把排列组合的顺序算出来才行。

后来【瑜亮老师】补充了一个方法,代码如下所示:

word = ['鲁班七号', '鲁班', '鲁班大师', '甄姬', '安琪拉', '王昭君', '韩信', '孙悟空', '程咬金', '猪八戒'] res = [[i, j, k] for i in word[:] for j in word[word.index(i) 1:] for k in word[word.index(j) 1:]] print(res) print(len(res))

运行结果如下图所示:

写一句话让你快速记住一个词(我想从中取3个词)(4)

这个方法是用列表推导式 列表切片 index,也是能实现的,改用range(len)也是一样的意思,其实就是3层循环,具体的层级如下所示:

res = [] for i in word[:]: for j in word[word.index(i) 1:]: for k in word[word.index(j) 1:]: res.append([i, j, k]) print(res)

运行结果如下图所示:

写一句话让你快速记住一个词(我想从中取3个词)(5)

总之,完美地解决粉丝的问题啦!

不过话说回来,有现成的模块,直接用就行了,数据量一旦比较大的话,就难顶了,推荐第一种方法!

写一句话让你快速记住一个词(我想从中取3个词)(6)

三、总结

大家好,我是进阶者。这篇文章主要盘点了一个Python实现排列组合的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

,