我有一个完整的字母列表,例如li = ["m", "i"]
,我希望返回一个元组列表,如,不使用任何库,如下所示
[("m", "i"), ("i", "m")]
我尝试使用合并排序和递归来解决这个问题,但是,这似乎没有返回正确的输出。我的计划如下:
def permutation1(lis):
res = []
if len(lis) == 1:
res.append(lis)
elif len(lis) > 1:
last_index = len(lis) -1
last = lis[last_index]
rest = lis[:last_index]
if rest is not None and last is not None:
res.append(merge(permutation1(rest), last))
return res
def merge(lis, c):
res = []
for s in lis:
for i in range(len(s)+1):
ps = s[:i]+ list(c) + s[i:]
value = tuple(list(ps))
# print value
res.append(value)
return res
例如,输入["m", "i", "b"]
时,输出为[[('b', ('i', 'm'), ('m', 'i')), (('i', 'm'), 'b', ('m', 'i')), (('i', 'm'), ('m', 'i'), 'b')]]
,这是不正确的。如何改进程序让我按预期运行?
答案 0 :(得分:1)
试试这个。
from itertools import permutations
[i for i in permutations(li,2)]
<强>结果强>
[('m', 'i'), ('i', 'm')]
这里没有permutations
In [32]: [k for k in [(i,li[j])for i in li for j in range(2)] if len(set(k)) != 1]
Out[32]: [('m', 'i'), ('i', 'm')]