是所有列表里的數(shù)字放在一起再組合,還是必須按照次序從第一個(gè)列表取第一個(gè)數(shù)字,第二個(gè)列表取第二個(gè)數(shù)字。。。的組合?
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供松原網(wǎng)站建設(shè)、松原做網(wǎng)站、松原網(wǎng)站設(shè)計(jì)、松原網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、松原企業(yè)網(wǎng)站模板建站服務(wù),十余年松原做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
我的理解是第二種情況。可以用循環(huán)不斷擴(kuò)充已有的列表:
list1=[1,2,3,4]
list2=[5,6,7]
list3=[8,9]
list4=[10,11,12,13]
lists = [list1, list2, list3, list4]
def Combination(I):
o = [[x] for x in lists[I[0]]]
for index in I[1:]:
r = lists[index]
tmp = []
for l in o:
for x in r:
tmp.append(l + [x])
o = tmp
return o
if __name__ == '__main__':
print(Combination([0, 1]))
print(Combination([1, 2, 3]))
結(jié)果:
[[1, 5], [1, 6], [1, 7], [2, 5], [2, 6], [2, 7], [3, 5], [3, 6], [3, 7], [4, 5], [4, 6], [4, 7]]
[[5, 8, 10], [5, 8, 11], [5, 8, 12], [5, 8, 13], [5, 9, 10], [5, 9, 11], [5, 9, 12], [5, 9, 13], [6, 8, 10], [6, 8, 11], [6, 8, 12], [6, 8, 13], [6, 9, 10], [6, 9, 11], [6, 9, 12], [6, 9, 13], [7, 8, 10], [7, 8, 11], [7, 8, 12], [7, 8, 13], [7, 9, 10], [7, 9, 11], [7, 9, 12], [7, 9, 13]]
【1】模塊功能
數(shù)學(xué)相關(guān)庫
【2】math庫
1、math.ceil(x):返回一個(gè)大于或等于x的最小整數(shù)
print(math.ceil(20.1))
2、math.comb(x,y):返回?zé)o重復(fù)且無順序地從x項(xiàng)中抽取y項(xiàng)方式的總和。
print(math.comb(6,2))
3、math.copysign(x,y):返回基于x的絕對值和y的符號的浮點(diǎn)數(shù)。
print(math.copysign(10,-1))
4、math.fabs(x):返回x的絕對值
print(math.fabs(-10))
5、math.factorial(x):以一個(gè)整數(shù)返回x的階乘
print(math.factorial(10))
6、math.floor(x):返回x的向下取整,小于或等于x的整數(shù)
print(math.floor(10.1))
7、math.fmod(x,y):返回以y為模,x的余數(shù)。
print(math.fmod(10.1,3))
8、math.frexp(x):將x分解為科學(xué)表達(dá)式(m*2**e),返回m和e
print(math.frexp(10))
9、math.fsum(x):返回x對象求和。
print(math.fsum([10,1]))
10、math.gcd(*integers):返回所給整數(shù)的最大公約數(shù)。
print(math.gcd(10,6))
11、math.isclose(a,b,rel_tol=,abs_tol=):判斷a,b兩數(shù)是否相近,rel_tol指定相對容差,abs_tol指定絕對容差。
print(10,7,rel_tol=0.1,abs_tol=0)
12、math.isfinite(x):判斷x是否是有限的。
print(math.isfinite(10))
13、math.isinf(x):判斷x是否是無限的。
print(math.isinf(10))
14、math.isnan(x):判斷x是否是NaN
print(math.isnan(10))
15、math.isqrt(x):返回x的整數(shù)平方根(向下取整)
print(math.isqrt(10))
【3】random庫
1、random.random():返回0-1的隨機(jī)小數(shù)。
print(random.random())
2、random.randint(x,y):返回大于x小于y的隨機(jī)整數(shù)
print(random.randint(1,10))
3、random.choice(x):返回容器x的隨機(jī)一個(gè)元素
print(random.choice('abcde'))
4、random.choices(x):返回容器x的隨機(jī)元素,并可以指定權(quán)重,及返回的元素個(gè)數(shù)。
print(random.choices('abcdefghij',k=6,weights=[0,0,0,0,0,0,0,0,1,1]))
下載并安裝NodeJS.msi格式安裝包使用cmd/PowerShellnode-v驗(yàn)證是否安裝成功npminstall-gcsscomb全局安裝csscombcsscomb-V驗(yàn)證安裝快捷鍵(Ctrl+Alt+S),搜索欄輸入externaltoolWebStorm內(nèi)打開Setting-ExternalToo
算法 列出這5個(gè)數(shù)的所有組合,找出組合的和減268的絕對值最小的組合,
完整的Python程序如下
import math
def combine(a,n,num):
real_size=int(math.pow(2, n))
min=abs(sum(a)-num)
min_comb=[]
for i in range(real_size):
min_list=[]
total=0
for j in range(n):
if i (1 j):
min_list.append(a[j])
total=total+a[j]
if abs(total-num)=min:
if abs(total-num)==min:
min_comb.append(min_list)
else:
min_comb=[min_list]
min=abs(total-num)
print(min_comb)
a=[110,120,130,140,150]
num=268
combine(a,len(a),num)
源代碼(注意源代碼的縮進(jìn))
Python實(shí)現(xiàn)的排列組合計(jì)算操作示例
本文實(shí)例講述了Python實(shí)現(xiàn)的排列組合計(jì)算操作。分享給大家供大家參考,具體如下:
1. 調(diào)用 scipy 計(jì)算排列組合的具體數(shù)值
from scipy.special import comb, perm
perm(3, 2)
6.0
comb(3, 2)
3.0
2. 調(diào)用 itertools 獲取排列組合的全部情況數(shù)
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)]
a?=?[1,2,3,4,5]
b?=?[2,3,4]
len_a?=?len(a)
len_b?=?len(b)
if?len_a??len_b:????????#列表長度補(bǔ)齊,a長的話用0補(bǔ)齊b
...?????for?i?in?range(len_a?-?len_b):
...?????????????b.append(0)
...?elif?len_b??len_a:?????#b長的話用0補(bǔ)齊a
...?????for?i?in?range(len_b?-?len_a):
...?????????????a.append(0)
...?else:????????????????????#兩個(gè)列表一樣長,什么都不做
...?????pass
...
comb?=?zip(a,?b)
result?=?[]
for?a,?b?in?comb:
...?????result.append(a+b)
...
result
[3,?5,?7,?4,?5]
讀文件,將內(nèi)容保存到列表我就不寫了。你寫的沒什么問題,你只要把兩個(gè)列表的長度補(bǔ)齊就可以了。