2016-07-22 67 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