Python实现列表元素全排列的两种核心方法

周叙
周叙
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍在Python中获取列表元素所有排列形式的两种主要方法。第一种是利用递归算法手动实现全排列逻辑,适用于理解算法原理;第二种是调用Python标准库itertools模块中的permutations函数,代码简洁高效。文章还通过四个数字的全排列示例,对比了常规循环交换与递归实现的差异,帮助开发者根据场景选择合适方案。

Python列表全排列示例

示例如下:

输入列表为 ['a', 'b', 'c'],其所有排列形式包括:['a', 'b', 'c']、['a', 'c', 'b']、['b', 'a', 'c']、['b', 'c', 'a']、['c', 'a', 'b'] 以及 ['c', 'b', 'a']。

递归实现全排列

方法一:通过递归方式实现


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

利用内置模块实现

方法二:利用Python内置模块


import itertools

def permutation(li):
  print(list(itertools.permutations(li)))

四个数字全排列实现方案

补充拓展:使用Python实现四个数字的全排列

首先采用常规做法,通过多层循环交换元素位置来完成排列。


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]

当列表长度较长或元素数量较多时,上述常规方法的实现会变得较为繁琐。因此,以下采用递归方式来实现全排列。


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) 

以上关于Python输出列表元素所有排列形式的介绍到此结束,希望能为读者提供参考,并欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表