如果有10个词,我想从中取3个词,该怎么做?

liftword2个月前 (02-08)技术文章15

作者:Python进阶者

来源:Python爬虫与数据挖掘

一、前言

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

很明显是个排列组合的问题,直接计算组合结果: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))

运行结果如下图所示:

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

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

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

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

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))

运行结果如下图所示:

这个方法是用列表推导式+列表切片+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)

运行结果如下图所示:

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

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

三、总结

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

相关文章

用python开发一个炸金花小游戏,注意别玩上瘾了

大家好,我是才哥。众所周知?扑克牌可谓是居家旅行、桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则。炸(诈)金花又叫三张牌,是在全国广泛流传的...

Python常用算法学习(7) 动态规划,回溯法(原理+代码)-最全总结

引言:从斐波那契数列看动态规划  斐波那契数列:Fn = Fn-1 + Fn-2 ( n = 1,2 fib(1) = fib(2) = 1)练习:使用递归和非递归的方法来求解斐波那契数列的第 n 项...

按照概率学原理,你这牌一看就胡不了

撰文 比邻星春节假期,独乐乐不如众乐乐。如果要选择一种声音代表新春佳节的团聚,除了噼里啪啦的鞭炮、杯盏相碰的清脆,一句“三缺一”和麻将桌上哗啦啦的搓麻声必定占有一席之地。麻将在不同段位的玩家眼中代表着...

林俊杰的元宇宙房地产塌房,周杰伦站台的NFT稀碎

萧箫 发自 凹非寺量子位 | 公众号 QbitAI元宇宙房产和NFT暴跌,明星也拦不住。林俊杰花50多万元在元宇宙买下的三块虚拟地产暴降80%,跌到9万多元。这些地产如今访问量几乎为零,周围也完全没有...

大厂面试:排列与组合傻傻分不清楚

一、概念以a、b、c三个字符来举例。1)排列:全排列即字符不能重复,第一位有3种选择,第二位有2种选择,第三位有1种选择,所以最后有3*2*1=6种结果。2)组合:组合不要求三个字符都必须加入结果。求...

Python整数类型(int)详解_python中整数类型

整数就是没有小数部分的数字,Python 中的整数包括正整数、0 和负整数。有些强类型的编程语言会提供多种整数类型,每种类型的长度都不同,能容纳的整数的大小也不同,开发者要根据实际数字的大小选用不同的...