2016-07-22 33 views
2

arr=['one','two','three']

結果一定是這樣的: onetwo,twothree,onethreePython中數組中字符串的可能組合?

和itertools.permutations不會在這種情況下工作。

我們可以通過簡單地添加for循環並添加它們來實現這一點,這對於小型數組很有效,但對於大型數組需要時間。
我想知道有沒有什麼辦法可以實現(like itertools.permutations)

回答

4

也許你想要的是itertools.combinations

>>> [''.join(comb) for comb in (itertools.combinations(arr, 2))] 
['onetwo', 'onethree', 'twothree'] 
+0

有什麼辦法可以將這個應用到兩個不同的數組中嗎?我的意思是arr1 = ['name1','name2']; arr2 = ['name3','name4']。輸出應該是'name1name3,name1name4 ,name2name3,name3name4' –

+0

@SrikerCh兩個列表,你需要更多的工作 – galaxyan

1

兩個列表

  • 創建等長的列表與其他列表進行比較
  • 拉鍊與其他列表
  • 把所有的子表一起
  • 加入列表
  • 新名單
from itertools import permutations 

arr1=['name1','name2'] 
arr2=['name3','name4'] 

set(map(lambda x: ''.join(x),reduce(lambda x,y:x+y, [ zip(i,arr1) for i in permutations(arr2,len(arr1)) ]))) 

output: 

set(['name3name1', 'name3name2', 'name4name1', 'name4name2']) 
+0

這個工作只適用於長度相等的數組嗎? –

+0

@SrikerCh不,它也適用於不等長 – galaxyan