我正在用 python 創建一個程式,它允許我根據給定的資產生成 NFT Art。顯然,可以生成的藝術數量根據資產(圖層和圖層影像)而有所不同,這正是問題所在,我如何計算可能的組合,同時計算可選圖層?
為了更清楚:
例如我有 4 層:
l1 = ["A","B"]
l2 = ["C"]
l3 = ["D","E"] #optional
l4 = ["F","G"] #optional
其中 l3 和 l4 是可選的。所以我期望的組合是:
1. ["A","C"]
2. ["B","C"]
3. ["A","C","D"]
4. ["A","C","E"]
5. ["B","C","D"]
6. ["B","C","E"]
7. ["A","C","F"]
8. ["A","C","G"]
9. ["B","C","F"]
10. ["B","C","G"]
11. ["A","C","D","F"]
12. ["A","C","D","G"]
13. ["A","C","E","F"]
14. ["A","C","E","G"]
15. ["B","C","D","F"]
16. ["B","C","D","G"]
17. ["B","C","E","F"]
18. ["B","C","E","G"]
我怎樣才能做到這一點?我嘗試過,itertools.product
但顯然它考慮了所有串列
uj5u.com熱心網友回復:
一種方法是使用itertools 檔案powerset
中的配方。將“必需串列”的產品與“可選串列集”的每個子集鏈接在一起,就可以生成一個生成器,該生成器會生成每種可能性一次:
def powerset(iterable):
"""powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"""
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s) 1))
def product_with_optional(required_sequences, optional_sequences):
return chain.from_iterable(product(*required_sequences, *optionals)
for optionals in powerset(optional_sequences))
optional_combinations = product_with_optional(required_sequences=[l1, l2],
optional_sequences=[l3, l4])
這使:
1 ('A', 'C')
2 ('B', 'C')
3 ('A', 'C', 'D')
4 ('A', 'C', 'E')
5 ('B', 'C', 'D')
6 ('B', 'C', 'E')
7 ('A', 'C', 'F')
8 ('A', 'C', 'G')
9 ('B', 'C', 'F')
10 ('B', 'C', 'G')
11 ('A', 'C', 'D', 'F')
12 ('A', 'C', 'D', 'G')
13 ('A', 'C', 'E', 'F')
14 ('A', 'C', 'E', 'G')
15 ('B', 'C', 'D', 'F')
16 ('B', 'C', 'D', 'G')
17 ('B', 'C', 'E', 'F')
18 ('B', 'C', 'E', 'G')
uj5u.com熱心網友回復:
我假設可選層的順序很重要,因此您可以迭代地創建可選層的所有組合,然后使用itertools.product
layers
來optional_layers
生成串列。
import itertools
from pprint import pprint
l1 = ["A","B"]
l2 = ["C"]
l3 = ["D","E"] #optional
l4 = ["F","G"] #optional
layers = [l1, l2]
optional_layers = [l3, l4]
results = []
results = itertools.product(*layers)
for i in range(len(optional_layers) 1):
comb = itertools.combinations(optional_layers, r=i)
for c in comb:
results = itertools.product(*layers, *c)
pprint(results)
輸出
[('A', 'C'),
('B', 'C'),
('A', 'C'),
('B', 'C'),
('A', 'C', 'D'),
('A', 'C', 'E'),
('B', 'C', 'D'),
('B', 'C', 'E'),
('A', 'C', 'F'),
('A', 'C', 'G'),
('B', 'C', 'F'),
('B', 'C', 'G'),
('A', 'C', 'D', 'F'),
('A', 'C', 'D', 'G'),
('A', 'C', 'E', 'F'),
('A', 'C', 'E', 'G'),
('B', 'C', 'D', 'F'),
('B', 'C', 'D', 'G'),
('B', 'C', 'E', 'F'),
('B', 'C', 'E', 'G')]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/435768.html
上一篇:哪種演算法將是更快的演算法?
下一篇:' '操作不適用于型別function(x:real):real和real。檢查程式的運行情況a=0.1;b=1.0;h=0.1;