导航:首页 > 编程语言 > python3组合算法实现

python3组合算法实现

发布时间:2023-05-23 07:13:52

python 数组里面求和为某固定值的所有组合

l=[2,3,4,5,6,7,8,10,12,13,23,34,56]

defcombination(l,n):
l=list(sorted(filter(lambdax:x<=n,l)))
combination_impl(l,n,[])

defcombination_impl(l,n,stack):
ifn==0:
print(stack)
return
foriinrange(0,len(l)):
ifl[i]<=n:
stack.append(l[i])
combination_impl(l[i+1:],n-l[i],stack)
stack.pop()
else:
break

combination(l,22)

㈡ Python实现的排列组合计算操作示例

Python实现的排列组合计算操作示例
本文实例讲述了Python实现的排列组合计算操作。分享给大家供大家参考,具体如下:
1. 调用 scipy 计算排列组合的具体数值
>> from scipy.special import comb, perm
>> perm(3, 2)
6.0
>> comb(3, 2)
3.0
2. 调用 itertools 获取排列组合的全部情况数
>> from itertools import combinations, permutations
>> permutations([1, 2, 3], 2)
<itertools.permutations at 0x7febfd880fc0>
# 可迭代对象
>> list(permutations([1, 2, 3], 2))
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
>> list(combinations([1, 2, 3], 2))
[(1, 2), (1, 3), (2, 3)]

㈢ Python3 - 排列组合的迭代

遍历一个序列中元素的所有可能的排列或组合。

itertools 模块提供了三个函数来解决这类问题。 其中一个是 itertools.permutations() , 它接受一个序列并产生歼扒一个元组序列,每个元组由序列中所有元素的一个可能粗升排列组成,即通过打乱序列中元素排列顺序生成一个元组,比如:

如果想得到指定长度的所有排列,你可以传递一个可选的长度参数。比如:

使用 itertools.combinations() 可得到输入序列中元素的所有的组合。比如:

对于 combinations() 来讲,元素的顺序已经不重要了,即组合 ('a', 'b') 与 ('b', 'a') 其实是一样的,最终只会输出其中一个。

在计算组合的时候,一旦元素被选取就会从候选中剔除掉(比如如果元素’a’已经被选取了,那么接下来就不会再考虑它了)。 而函数 itertools.combinations_with_replacement() 允许同一个元素被选择多次,比如:

尽管手动可以实现排列组合算法,但是这样做比较麻烦,当遇到有些复杂的迭代问题时,可以先去看看itertools模块是否能实现岩改老,很有可能会在里面找到解决方案!

㈣ Python实现,输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接

你的例子第一列全是 3,我给个例子吧:[321, 32, 3, 4],输出该是 321,32,3,4。

第一个数越大,则应该排在后面,毕竟 4XXX 是比 3XXX 大的。

setp1:[0][1][2]
321
32
3
4
排序第0列,越大的排越后。
ret=[?,?,?,4]

setp2:[0][1][2]
321
32
3<3><-补位3,因为3是同3组第一个元素。
排序第1列,越大的排越后。
ret=[?,?,3,4]

setp3:[0][1][2]
321
32<3><-补位3,因为3是同3组第一个元素。
排序第2列,越大的排越后。323比321大,所以……
ret=[?,32,3,4]

只剩一个,那个排第一:
ret=[321,32,3,4]

以上就是基本思路了。综上可得:

1. 先按 [0] 列分组:

2. 组中每个数都补位到同样长度,然后再排序。

完整代码:

defjoinmin(ls):
groups={}
foriteminls:
prefix=item
n=0
whileprefix>10:
prefix//=10
n+=1
groups.setdefault(prefix,[]).append([item,n])
sorted_keys=list(sorted(groups))
ret=0
forprefixinsorted_keys:
items=groups[prefix]
max_n=max([t[1]fortinitems])
presort_items=[]
foritem,item_ninitems:
padding=item
n=item_n
whilemax_n>n:
padding*=10
padding+=prefix
n+=1
presort_items.append((padding,item,item_n))
for_,item,ninsorted(presort_items):
whilen>-1:
ret*=10
n-=1
ret+=item
returnret

不是看在你的分上答的,不过这种小题目蛮有趣的。

㈤ python 递归实现组合

用迭代器比较好
def combin(items, n=None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[i+1:]
for c in combin(rest, n-1):
yield v + c

for i in range(len([1,2,3,4])):
for j in combin([1,2,3,4], i+1):
print j,

㈥ 【基础】Python3小程序_之排列组合

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?具体有哪些数字

方法一:for循环+集合去重复项

方法二:内置函数itertools

排列组合迭代器:

itertools.proct <p,q…[repeat=l]>笛卡尔积,相当于嵌套的for

itertools.permutation <p[,r]>长度为r元组,所有可能得排列,无重复元素

itertools.combination <p,r> 长度r元组,有序,无重复元素

itertools.combinaton_with_replacement <p,r> 长度人员组,有序,元素可重复

举例

模块其他函数: https://docs.python.org/zh-cn/3.7/library/itertools.html

        https://blog.csdn.net/weixin_41084236/article/details/81626968

阅读全文

与python3组合算法实现相关的资料

热点内容
哪个苹果app能制作日志 浏览:969
爱情公寓关谷悠悠解压版 浏览:261
微信音频缓存文件夹 浏览:762
androideclipse32 浏览:125
商用压缩机承受温度 浏览:48
健身房压缩衣 浏览:976
单片机太阳光追踪系统所需材料 浏览:356
比泽尔压缩机型号规则 浏览:86
华兴数控切断编程 浏览:789
西安离心压缩机 浏览:546
程序员需要优盘吗 浏览:879
西藏掌上社保app在哪里下载 浏览:599
怎么让服务器固定 浏览:65
计数器定时器编程 浏览:13
程序员网上投资平台 浏览:878
用shell编程计算1加到100 浏览:233
外包公司的程序员一天写多少代码 浏览:532
苹果手机主屏幕app如何移动 浏览:567
服务器怎么连接远程密码 浏览:431
linux娱乐命令 浏览:368