打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
面试题-有1、2、3、4数字能组成多少互不相同无重复数的三位数?

前言

有1、2、3、4数字能组成多少互不相同无重复数的三位数?

普通写法

这一题很多小伙伴能想到的最直接的方法是嵌套三个for循环,然后判断3个数字不相等,得到组合的情况

s = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k:
print(i, j, k)
s += 1
print("总过能生成的排列组合:", s)

这种方式简单粗暴,毫无美感可言,只能算勉强及格。(可能你会说我去百度搜到都是这个答案, 那就不用往下看了!)
如果数据量非常大的时候,是很消耗内存的,于是会想到生成器。

生成器解决

可以定义一个生成器,可以用for循环遍历取值。

def permutation():
"""
定义一个生成器,函数带yield就是生成器
"""
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k:
yield "%s%s%s"%(i,j,k)

for i in permutation(): # 遍历
print(i)

# 也可以通过len来求长度
print(len(list(permutation())))

这里虽然用到迭代器的知识了,但上面有3个for循环,依然不太好看。

排列组合

从n个元素的集合中抽取样本容量为r的样本,重复抽样的有序样本数为:

无重复抽样的有序样本数为:

这个理解起来应该是没有难度的,比如有10个人,我现在想选3个人出来拍我马屁:

  1. 那我先从10个人里随便挑一个,这已经有10种情况了;

  2. 我再从剩下的的9个人里随便挑一个,又是9种情况;

  3. 然后我又从剩下的8个人力随便挑一个,又是8种情况;

  4. 根据乘法原理,一共有10×9×8=720种情况。

迭代工具 itertools

itertools是python内置的模块,使用简单且功能强大,里面有个 permutations 方法就是专门生成排列组合的生成器。

from itertools import combinations,permutations

# 分别打印每种排列情况
for i, j, k in permutations(['1', '2', '3', '4'], 3):
print(i, j, k)

# 计算总数
print(len(list(permutations(['1', '2', '3', '4'], 3))))

用内置方法就不用自己写生成器了。

2021年第七期《python接口自动化+测试开发》课程,4月18号开学(火热报名中!)

4月18号-7月11号,20:30-22:30

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python中itertools.permutations的用法解析
16个鲜为人知的 Python 小众技巧,让你的代码更加简洁高效
Python 排列组合的计算
python内置函数-排列组合函数
迭代器神器 Python Itertools 大揭秘:如何让你的代码瞬间提升!
python itertools功能详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服