Let's say we have a list: ['a','b','c','d']
The output must be:

abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
.....

诸若此类.

如果我知道列表中元素的数量,我就可以编写程序, 但该列表是由用户提供的(考虑到用户提供了一个唯一元素的列表).

l = ['a', 'b', 'c', 'd']
for h in l: 
    for i in l:
        ll = [h+i+j+k for j in l for k in l if len([h,i,j,k])==len(set([h,i,j,k]))] 
        for m in ll:
            print(m)

这个程序给了我上面的输出.

如果我想要3个元素,我可以删除一个for循环,或者如果我想要5个元素,我可以添加一个for循环, 但程序必须在运行时考虑元素的数量并提供输出. 基本上,我正在寻找一个通用的算法,可以处理任何数量的元素.

我认为递归是一种方法,但不知道怎么做. 也尽量做到了不用itertools排列的方法.

任何帮助都将不胜感激.

推荐答案

递归版本:

def combinations(items):
    if len(items) <= 1:
        return [items]
    combs = []
    for i, item in enumerate(items):
        others = items.copy()
        others.pop(i)
        for sub_comb in combinations(others):
            whole = [item]
            whole.extend(sub_comb)
            combs.append(whole)
    return combs

elems = ['a', 'b', 'c', 'd']
all_combs = combinations(elems)
for comb in all_combs:
    print(''.join(comb))

它输出3个元素的6个组合、4个元素的24个组合、5个元素的120个组合,依此类推.

这是n!(阶乘),这是n个不同元素可以产生的permutations的确切数字.

Python-3.x相关问答推荐

循环遍历数据框以提取特定值

PythonPandas READ_EXCEL空数据帧

如何将从维基百科表中抓取的数据转换为字典列表?

我应该如何调整我的变量,以便如果有任何单词符合其中的条件,程序会将其附加到新列表中?

python 3.10.5 中可能存在的错误. id 函数工作不明确

考虑到Pandas 系列中的不同索引,如何正确估计两列的百分比变化? Python相关

Python rolling_corr 取消后,应该用什么方法来处理

在python中基于列表理解的条件下跳过元素

基本 Flask 应用程序未运行(TypeError:模块中缺少必填字段type_ignores)

如何判断一个字符串是否包含有效的 Python 代码

使用 Sympy 方程进行绘图

python 3.4版不支持'ur'前缀

如何在 Python 中计算两个包含字符串的列表的 Jaccard 相似度?

无论如何我可以在 Google colaboratory 中下载文件吗?

在python中打印下标

每次启动 Google Colab 时都必须安装所需的软件包吗?

Python 3 - Zip 是 pandas 数据框中的迭代器

Python 3中星型导入的函数形式是什么

如何将python日志(log)级别名称转换为整数代码

Python:如何在 Windows 资源管理器中打开文件夹(Python 3.6.2、Windows 10)