2013-07-16 52 views
3

可以說我有稱爲陣列ARR = [1,2,3,4]在Python中,我如何創建可變長度組合或排列?

如何可以生成所有具有最小2個論點,即最終看起來像

[1,2] 
[1,3] 
[1,4] 
[1,2,3] 
[1,2,4] 
[1,2,3, 4] 
[2,3] 
[2,4] 

等可能的組合等等?沒什麼我嘗試的作品。我似乎不能使用itertools.combinations或permutations,因爲我需要知道參數大小,我似乎無法使用itertools.products,因爲這將從每個列表看起來像這樣[[1],[2],[3],[4],[5]]的列表中的每個最少一個參數。特別感謝您提供的一條線條和理解。

如果我想將它們加在一起,那麼在幫助方面會有太多要求嗎? ;-)

回答

9

如何:

(x for l in range(2, len(arr)) for x in itertools.combinations(arr, l)) 

[x for l in range(2, len(arr)) for x in itertools.combinations(arr, l)] 

,如果你需要的資源列表。

這是下面的嵌套循環

res = [] 
for l in range(2, len(arr)): 
    for x in itertools.combinations(arr, l): 
     res.append(x) 
return res 
+0

1縮小的那些。你介意告訴我這是如何工作的嗎?這不是一個嵌套的循環嗎? – Leon

+1

請參閱我的編輯。 – hivert

0

從相當於:http://wiki.python.org/moin/Powerful%20Python%20One-Liners使用以下來創建所有子集,然後與用於列表解析長度小於2

f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))] 

print [k for k in f([1,2,3,4]) if len(k) >1] 
相關問題