2013-06-13 67 views
2

我不知道如何描述這個。我將展示一個例子: 這是我的輸入列表基於一個關鍵屬性的python嵌套列表中的組合

[[0,25], [1,54], [2,76], [3,13], [4,79]] 

這是輸出我想:

[[[0,25], [1,54]], [[0,25], [1,54]], [[0,25], [2,76]], ...] 

即我想要一個包含取2內列出的所有組合在時間列表,基於內部列表的第一個字段。

我試圖itertools是這樣的:

perm_list = itertools.combinations(task_list, 10) 

但它是所有顯示此:

itertools.combinations object at 0x0120B060 
+2

'itertools'調用返回迭代器;得到一個列表,在它們上調用'list()':'perm_list = list(perm_list)'。 –

+0

我不明白你的輸出 – jamylak

回答

1
>>> from itertools import combinations 
>>> nums = [[0,25], [1,54], [2,76], [3,13], [4,79]] 
>>> list(combinations(nums, r=2)) 
[([0, 25], [1, 54]), ([0, 25], [2, 76]), ([0, 25], [3, 13]), ([0, 25], [4, 79]), ([1, 54], [2, 76]), ([1, 54], [3, 13]), ([1, 54], [4, 79]), ([2, 76], [3, 13]), ([2, 76], [4, 79]), ([3, 13], [4, 79])] 

顧名思義,itertools.combinations返回一個迭代器(產生的組合懶洋洋地),您必須使用構造函數list(...)的迭代器來獲取您的列表。通常迭代器是可取的,因爲你可能只需要迭代組合。

for a, b in combinations(nums, r=2): 
    pass 

如果您不需要存儲結果,請不要構造列表。

+0

你爲什麼使用r = 2?我不能只給2? – diAblo

+0

並且任何人都可以將我指向生成給定數組的k個大小子集的算法嗎?我在互聯網上看到了很多代碼,但我不明白這一點:( – diAblo

+0

@ user2138665當然,您可以在不使用'r ='的情況下執行此操作,請親自嘗試!「將我指向生成k個大小子集的算法給定數組「是這(http://docs.python.org/2/library/itertools.html#itertools.combinations)你的意思 – jamylak