2014-01-07 178 views
2

我有以下列表:列表排序爲蟒蛇

list1 = [ 'A','B','C'] 
list2 = [ '1', '2' ] 

試圖生成的元組具有以下期望的結果一個新的列表:

[(A1),(A2),(A1,B1),(A1,B2),(A2,B1),(A2,B2),(A1,B1,C1),(A2,B1,C1)...] 

每個元組將eventully被用來編寫輸出文件中的單行。
注意的是:

  1. 在每個元組,來自list1每個字母,如果定義,必須前述字母之後定義。例如,如果'B'被定義在一個元組中,那麼'A'也必須在元組中,並且在'B'之前。元組(A1,C1)是不需要的,因爲'B'沒有被定義好。
  2. 元組必須是唯一的。
  3. list1 & list2只是一個例子,可能會有所不同。

我試圖玩弄itertools,特別是與, productpermutationscombinations 相當長的一段時間。我似乎無法取消,我甚至沒有一些代碼值得分享。

回答

2

list1連續較大切片和產品用途產品:

from itertools import product 

elements = [] 
for letter in list1: 
    elements.append([''.join(c) for c in product(letter, list2)]) 
    for combo in product(*elements): 
     print combo 

elements列表生長每個循環,加入的另一組信+號碼列表,以產生產品。

這將產生:

>>> elements = [] 
>>> for letter in list1: 
...  elements.append([''.join(c) for c in product(letter, list2)]) 
...  for combo in product(*elements): 
...   print combo 
... 

('A1',) 
('A2',) 
('A1', 'B1') 
('A1', 'B2') 
('A2', 'B1') 
('A2', 'B2') 
('A1', 'B1', 'C1') 
('A1', 'B1', 'C2') 
('A1', 'B2', 'C1') 
('A1', 'B2', 'C2') 
('A2', 'B1', 'C1') 
('A2', 'B1', 'C2') 
('A2', 'B2', 'C1') 
('A2', 'B2', 'C2') 
+0

我錯過了一步這裏。 :-) –

+0

@Nabla:那裏,解決它。 –

+0

是的,我現在看到了,看着它。 –

1

這個怎麼樣:

from itertools import product 

output = [] 
for z in [list1[:n+1] for n in range(len(list1))]: 
    for y in product(list2, repeat=len(z)): 
     output.append(tuple(''.join(u) for u in zip(z, y))) 

print(output) 
+0

偉大的人。完美的作品。如果可以的話,我會接受這兩個答案。 Martijn Pieters只是毆打你。 – idanshmu

+0

不是第一次! – richsilv

+0

哈哈,也許你應該說服他給你這個... – idanshmu