2014-08-30 51 views
1

我正在嘗試使用itertools.product來創建0-9999中的數字列表。我能夠通過執行以下操作從0000-9999創建列表:合併itertools.product的結果?

numbers = ['0','1','2','3','4','5','6','7','8','9'] 
itertools.product(numbers,numbers,numbers,numbers) 

雖然我要像0001條目,我也想獲得001011

什麼是最有效的方法來包括這些?我應該撥打電話itertools.product(numbers,numbers,numbers)itertools.product(numbers,numbers),然後以某種方式將這些與原件結合起來,還是有更清晰的方式?

如果我應該再打兩個電話併合並,有人可以指出我會如何做到這一點?我試圖使用.append(),但它拋出這個錯誤:

'itertools.product' object has no attribute 'append' 

感謝您的幫助。

回答

3

你可以使用嵌套listcomp或genexp(大小減小這裏顯示的目的):

>>> numbers = ['0','1','2'] 
>>> [''.join(p) for n in range(1,4) for p in product(numbers, repeat=n)] 
['0', '1', '2', '00', '01', '02', '10', '11', '12', '20', '21', '22', '000', '001', '002', '010', '011', '012', '020', '021', '022', '100', '101', '102', '110', '111', '112', '120', '121', '122', '200', '201', '202', '210', '211', '212', '220', '221', '222'] 
1
numbers = ['0','1','2','3','4','5','6','7','8','9'] 
list(''.join(subl) for subl in itertools.chain.from_iterable(itertools.product(numbers, repeat=i) for i in range(1,5)))