2013-02-22 130 views
-2

讓說,我有表結合列表元素的列表

[ ['B','2'] , ['o','0'], ['y']] 

的名單,我想清單合併爲這樣的事情而無需使用iteratool

["Boy","B0y","2oy","20y"] 

我可以」不要使用itertool,因爲我必須使用python 2.5。

+3

如果您不想使用itertools,請查看itertools函數的等效代碼,並複製並粘貼它(錯誤!)或重新實現它(同樣不好,它會變慢!)。 -1來添加一個沒有道理的要求,而不解釋原因。 – ThiefMaster 2013-02-22 22:17:30

+0

_「我必須使用python 2.5」_ - \ *標籤爲python-2.7 \ * – Eric 2013-02-22 22:43:19

+0

['itertools'](http://docs.python.org/2/library/itertools.html):_「New在版本** 2.3 **中。「_。儘管['itertools.product'](http://docs.python.org/2/library/itertools.html#itertools.product)是2.6。 – Eric 2013-02-22 22:44:47

回答

1

itertools.product()做你想要的。

>>> [''.join(x) for x in itertools.product(*[['B', '2'], ['o', '0'], ['y']])] 
['Boy', 'B0y', '2oy', '20y'] 
+0

如果我不能使用iteratool – user1968057 2013-02-22 22:30:51

+0

那麼請你解釋爲什麼是這種情況。或者你只需​​點擊我答案中的鏈接,並複製並粘貼'itertools.product'實現並使用那個... – ThiefMaster 2013-02-22 22:38:03

+0

我想知道是否還有其他方法可以在不使用itertool的情況下執行此操作。我知道可以使用itertools來實現 – user1968057 2013-02-22 22:39:21

0

如果你不想使用itertools,這個列表理解產生的輸出:

>>> LoL=[['B','2'], ['o','0'], ['y']] 
>>> [a+b+c for a in LoL[0] for b in LoL[1] for c in LoL[2]] 
['Boy', 'B0y', '2oy', '20y'] 

這就是一個更緊湊的版本:

LoL=[['B','2'], ['o','0'], ['y']] 
r=[] 
for a in LoL[0]: 
    for b in LoL[1]: 
     for c in LoL[2]: 
      r.append(a+b+c) 

print r  

在這兩種情況下, ,你正在生產一個cartesian product這是更好,更靈活地完成與itertools.product()(除非你只是好奇如何做到這一點...)