㈠ 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