导航:首页 > 编程语言 > 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组合算法实现相关的资料

热点内容
python编程基础豆瓣 浏览:708
程序员乱码是什么意思 浏览:372
交友app怎么删除动态 浏览:90
男士穿衣哪个app好 浏览:36
如何把桌面软件改造成app 浏览:740
我的世界如何打开最近玩的服务器 浏览:384
程序员试用期汇报问题协助怎么写 浏览:129
抖音算法到底是什么 浏览:128
哪个vlan技术对报文加密 浏览:572
单片机定时电路 浏览:676
山西平台服务器云主机 浏览:702
按摩肚脐解压视频 浏览:991
php55安装教程 浏览:139
云服务器怎么查找本机域名 浏览:26
qd123y压缩机参数 浏览:387
程序员妈妈怀孕 浏览:492
金普国际编程 浏览:539
java什么是引用类型 浏览:946
这是命令吗txt 浏览:318
支付宝android包名 浏览:158