我正在嘗試創建兩個串列的組合。如果您愿意,串列 A 應該會增加,或者是一個滑動視窗。串列 B 是靜態的。其中串列 A 可以有任意數量的值。
我的問題似乎與我看到的已經發布的不同,因為我在一個串列上使用滑動視窗并保持另一個串列靜態,所以它不像兩個串列的每個組合那么簡單。
所以輸入看起來如下所示:
ListA = [Val1, Val2, Val3]
ListB = [0, 1]
給出以下輸出:
[Val1, 0]
[Val1, 1]
[Val2, 0]
[Val2, 1]
[Val3, 0]
[Val3, 1]
[[Val1, 0], [Val2, 0]]
[[Val1, 0], [Val2, 1]]
[[Val1, 1], [Val2, 0]]
[[Val1, 1], [Val2, 1]]
[[Val1, 0], [Val3, 0]]
[[Val1, 0], [Val3, 1]]
[[Val1, 1], [Val3, 0]]
[[Val1, 1], [Val3, 1]]
[[Val2, 0], [Val3, 0]]
[[Val2, 0], [Val3, 1]]
[[Val2, 1], [Val3, 0]]
[[Val2, 1], [Val3, 1]]
[[Val1, 0], [Val2, 0], [Val3, 0]]
[[Val1, 0], [Val2, 0], [Val3, 1]]
[[Val1, 0], [Val2, 1], [Val3, 0]]
[[Val1, 0], [Val2, 1], [Val3, 1]]
[[Val1, 1], [Val2, 0], [Val3, 0]]
[[Val1, 1], [Val2, 0], [Val3, 1]]
[[Val1, 1], [Val2, 1], [Val3, 0]]
[[Val1, 1], [Val2, 1], [Val3, 1]]
我已經嘗試了一段時間的 itertools 組合和產品,我無法理解它。Covid腦霧:D。任何幫助,將不勝感激。
謝謝
uj5u.com熱心網友回復:
我想有一種更清潔的方法可以做到這一點,但這很有效。
from itertools import chain, combinations, product
A = ['v1', 'v2', 'v3']
B = [0, 1]
for i in chain.from_iterable(combinations(A, k 1) for k in range(len(A))):
print([list(zip(i,j)) for j in product(B,repeat=len(i))])
print()
在 for 回圈中,我們遍歷 A 的冪集(不包括空集)。所以 (v1), (v2), (v3), (v1,v2), (v1,v3), (v2,v3), (v1,v2,v3)。
product(B,repeat=len(i)) 是 len(i) 的 B 的元素的所有排列(允許重復)。因此,如果 i = (v1,v2),我們將得到 ((0,0),(0,1),(1,0),(1,1))。
最后,遍歷這些排列并用 i 壓縮每個排列。對 powerset 的所有元素重復此操作。
uj5u.com熱心網友回復:
理解這種不斷增加的組合很復雜,但一旦你理解了它,你就會覺得很容易
讓我幫你理解這背后的邏輯
from itertools import combinations
from collections.abc import Iterable
listA = ["Val1", "Val2", "Val3"]
listB = [0, 1]
def perm(l, k):
n, p = l
res = ((i,) for i in l)
prev_gen = (i for i in res)
for i in range(1, k 1):
res = ((j, *i) if isinstance(i, Iterable) else (j, i) for i in prev_gen for j in (n, p))
prev_gen = res
return res
# 3C1 * 2 3C2 * 2^2 3C3*2^3
for idx in range(1, len(listA) 1):
for j in combinations(listA, idx):
for k in perm(listB, idx-1):
print(list(zip(j, k)))
這是生成所有可能組合的代碼。我試圖理解這背后的模式,我在這個中找到了以下模式
如果len(list1) = 3
然后len(list2) = 2它看起來像
3C1*2^1 3C2*2^2 3C3 * 2^3
因此,通過這種方法,我嘗試構建組合。
上面代碼的輸出
[('Val1', 0)]
[('Val1', 1)]
[('Val2', 0)]
[('Val2', 1)]
[('Val3', 0)]
[('Val3', 1)]
[('Val1', 0), ('Val2', 0)]
[('Val1', 1), ('Val2', 0)]
[('Val1', 0), ('Val2', 1)]
[('Val1', 1), ('Val2', 1)]
[('Val1', 0), ('Val3', 0)]
[('Val1', 1), ('Val3', 0)]
[('Val1', 0), ('Val3', 1)]
[('Val1', 1), ('Val3', 1)]
[('Val2', 0), ('Val3', 0)]
[('Val2', 1), ('Val3', 0)]
[('Val2', 0), ('Val3', 1)]
[('Val2', 1), ('Val3', 1)]
[('Val1', 0), ('Val2', 0), ('Val3', 0)]
[('Val1', 1), ('Val2', 0), ('Val3', 0)]
[('Val1', 0), ('Val2', 1), ('Val3', 0)]
[('Val1', 1), ('Val2', 1), ('Val3', 0)]
[('Val1', 0), ('Val2', 0), ('Val3', 1)]
[('Val1', 1), ('Val2', 0), ('Val3', 1)]
[('Val1', 0), ('Val2', 1), ('Val3', 1)]
[('Val1', 1), ('Val2', 1), ('Val3', 1)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527075.html
