有多個陣列,如【1、2、3】和【3、4、5】,想從每個陣列中取出一個數,組成新的陣列,請問演算法如何實作,才能實作所有組合!
uj5u.com熱心網友回復:
不知道你想要從陣列中取的數時任意數,還時陣列中第一個數或者其他uj5u.com熱心網友回復:
for i in [1,2,3]:for x in [3,4,5]:
print(i+’,’+x)
uj5u.com熱心網友回復:
任意數,全部組合uj5u.com熱心網友回復:
這個我只是舉個例子,不一定是幾個陣列,想要個通用的uj5u.com熱心網友回復:
我只是舉了個兩個的例子,不一定是幾個陣列,想要個通用的uj5u.com熱心網友回復:
這樣吧!
import random #匯入隨機模塊
list_1=[[1,2,3],[4,5,6],[6,7,8,9,10],[1,2,3,23,56],[1,2,3,4,5,4,3,2122,345,5678]]
list_2=[] # 用來存盤來自list_1中的資料
for list_3 in list_1:
list_2.append(list_3[random.randrange(len(list_3))])
print(list_2)
uj5u.com熱心網友回復:
可以自行定義若干個串列,比如a=[...]
b=[...]
for i in a:
for x in b:
這樣可以輸出全部組合。當然,可以增加更多的串列和回圈
也可以像樓上那樣實時添加,生成隨機組合
uj5u.com熱心網友回復:
樓主是不是想要這樣的效果?
def lists_combination(lists):
# 輸入多個串列組成的串列,
# 輸出其中每個串列所有元素可能的所有排列組合
try:
import reduce
except:
from functools import reduce
def myfunc(list1, list2):
return [str(i) + str(j) for i in list1 for j in list2]
return reduce(myfunc, lists)
def info_print(lists):
order = 0
total = 1 if len(lists) > 0 else 0
sizes = []
for lst in lists:
size = len(lst)
sizes.append(str(size))
total *= size
order += 1
print(f"第{order}個子串列{lst}的大小是: {size}")
exp = '*'.join(sizes)
print(f"排列組合的個數應該是: {exp}={total}")
if __name__ == '__main__':
l1 = [1, 2, 3, 4]
l2 = [4, 5, 6]
l3 = [7, 8, 9]
# l4=,l5=,l6=...ln= ... #自己繼續添加串列
ls = [l1, l2, l3] # 注意匹配你初始化好的所有陣列
info_print(ls)
result_list = lists_combination(ls)
print(f"所有的排列組合是:\n{result_list}")
uj5u.com熱心網友回復:
假設兩個陣列是x,y第一種用list comprehension
[(a,b) for a in x for b in y]
第二種
from itertools import product
list(product((x,y)))
如果不加list只是個iterable
uj5u.com熱心網友回復:
>>> a,b,c = [1,2,3],[4,5,6],[7,8,9]
>>> from itertools import product
>>> list(product(a,b,c))
[(1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 5, 7), (1, 5, 8), (1, 5, 9), (1, 6, 7), (1, 6, 8), (1, 6, 9), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 5, 7), (2, 5, 8), (2, 5, 9), (2, 6, 7), (2, 6, 8), (2, 6, 9), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 5, 7), (3, 5, 8), (3, 5, 9), (3, 6, 7), (3, 6, 8), (3, 6, 9)]
>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/73608.html
上一篇:快遞系統
