python输出列表元素的所有排列形式

例如:

<code>[‘a', ‘b', ‘c'] 输出 [‘a', ‘b', ‘c'] [‘a', ‘c', ‘b'] [‘b', ‘a', ‘c'] [‘b', ‘c', ‘a'] [‘c', ‘a', ‘b'] [‘c', ‘b', ‘a']/<code>

方法一:利用递归的方式实现

<code>def permutation(li):
len_list = len(li)
if len_list == 1:
return li

result = []
for i in range(len_list):
res_list = li[:i] + li[i+1:]
s = li[i]
per_result = permutation(res_list)
if len(per_result) == 1:
result.append(li[i:i + 1] + per_result)
else:
result += [[s] + j for j in per_result]
return result/<code>

方法二:利用python自带的模块

<code>import itertools

def permutation(li):
print(list(itertools.permutations(li)))/<code>

补充拓展:python实现四个数字的全排列

首先我们使用常规做法,循环交换完成。

<code>lst = [1, 3, 5, 8]

for i in range(0, len(lst)):
lst[i], lst[0] = lst[0], lst[i]
for j in range(1, len(lst)):
lst[j], lst[1] = lst[1], lst[j]
for h in range(2, len(lst)):
print(lst)
lst[j], lst[1] = lst[1], lst[j]
lst[i], lst[0] = lst[0], lst[i]/<code>

如果列表较长,元素较多,以上常规方法实现起来就比较吃力了,以下我们采用递归方式实现。

<code>def permutations(position):
if position == len(lst) - 1:
print(lst)
else:
for index in range(position, len(lst)):
lst[index], lst[position] = lst[position], lst[index]
permutations(position+1)
lst[index], lst[position] = lst[position], lst[index]
permutations(0)/<code>

转自:https://www.linuxprobe.com/speak-python-put.html


分享到:


相關文章: