- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
共享一道用Python基础+蒙特卡洛算法实现陈列组合的题目(附源码)
前言
????前几天在才哥沟通群里,有个叫【Rick Xiang】的粉丝在Python沟通群里问了一道关于陈列组合的问题,初步一看觉得很简约,实际上的确是有难度的。
????题目是:一个列表中有随机15个数,没有反复值。从列表里面任意选5个数,如何选出来包含a, a+1的全部组合。a可以是15个数中的任意一个。
一、思路
????这个问题看似简约,思路正如上图的【张老师】说的那样,分两步走,理论上来说,的确是可以实现。正常我们计算陈列组合公式,用下图中的组合公式计算是没问题的。
????但是这道题目的实现,涉及到用Python程序进行实现,当然计算一个数值,对于Python和我们来说并不难,难的是需要回归陈列组合本来的形态,然后用程序进行实现。本文借用了群成员【有点意思】所说的蒙特卡洛算法和代码进行实现,下面一起来看看吧!
????这里引用【张老师】提及的其次种方案,先随机取14个数,然后从14个随机数中随机取一个,然后自增1,作为第15个随机数,之后再从这15个随机数中进行随机取5个随机数,再进行if推断,看看连续值能否同时存在同一个列表中,之后把满足条件的列表append到一个空列表中去,最终再去用set集合去重,得到最终的结果。
二、处理方法
1)伪代码
????这里先给出【有点意思】大佬的伪代码,这样看上去大家也愈加好理解一些,如下图所示。其实下面这个代码也不算是伪代码,现在Python也支持中文变量,下面这个代码也是完全可以跑起来的,只不过看上去要比下文中的纯英文代码要愈加好理解一些。
????下面给出具体的实现过程,这里给出5份代码,欢迎大家乐观尝试。
2)代码一
# coding: utf-8
import random
def quchong(list_data):
list2 = []
for i in list_data:
if i not in list2:
list2.append(i)
return list2
# 从随机的15个数值中随机取出5个数,放到一个数组
# 生成不反复的14个随机数
random_14 = [random.randint(0, 100) for i in range(14)] # 这个写法简约消灭随机值反复
random_14 = random.sample(range(100), 14)
print(random_14)
random_1 = random.choice(random_14)
random_2 = random_1 + 1
random_14.append(random_2)
random_15 = random_14
print(random_1, random_2)
final_list = []
for i in range(100):
select = [random.choice(random_15) for j in range(5)]
quchong_select = set(select)
if random_1 in quchong_select and random_2 in quchong_select:
final_list.append(quchong_select)
fina_result = quchong(final_list)
print(len(fina_result))
? ? 乍一看,这个方法的确可以实现,但是这里会有一个小bug,那就是random.randint()函数生成的随机中会有反复值,而题目要求是生成不反复的随机值。那么这个问题,将在代码二中得到处理。
3)代码二
? ? 使用random.sample()函数,这个函数可以随机产生随机值,而且不会反复,还是很奈斯的。另外,使用了numpy.random.choice()函数,可以直接选择随机的5个数,效率比代码一更高一些。
# -*- coding: utf-8 -*-
import numpy as np
import?random
def quchong(list_data):
list2 = []
for i in list_data:
if i not in list2:
list2.append(i)
return list2
# 从随机的15个数值中随机取出5个数,放到一个数组
#?生成不反复的14个随机数
random_14 = random.sample(range(100), 14)
print(ra
您可能关注的文档
最近下载
- invoee英沃 VC610系列数控机床专用变频器使用说明书.pdf VIP
- 图形化一级全真模拟题.docx VIP
- 政教处主任职责及学生心理健康工作.docx VIP
- 全国青少年软件编程(python)等级考试模拟卷7(一级).docx VIP
- 5.2 珍惜师生情谊 课件-2024-2025学年统编版道德与法治七年级上册.pptx VIP
- 实用教程一级U4过去将来时.docx VIP
- 广东省家庭医生式签约服务团队.doc VIP
- 青少年软件编程(Python)等级考试试卷(一级).39.docx VIP
- WIN7操作系统练习题题库版.docx VIP
- 初中解一元二次方程计算练习.docx VIP
文档评论(0)