gpt4 book ai didi

python - 数字 1...N 的所有排列使用列表理解(没有 itertools)

转载 作者:行者123 更新时间:2023-12-05 01:23:22 26 4
gpt4 key购买 nike

我目前使用的是 Python 3.7.7,我给自己提出了一个编码挑战。

我想使用单行代码(可能是列表理解)列出从 1 到 N 的所有整数排列。我不能使用 itertools(或其他用一个函数解决这个问题的包)。

对于 N <= 9,我发现了“作弊”方法:

N = 3
print([list(str(i)) for i in range(10**N) if all([str(i).count(str(j)) == 1 for j in range(1,N+1)])])

例子:

Out: [['1', '2', '3'], ['1', '3', '2'], ['2', '1', '3'], ['2', '3', '1'], ['3', '1', '2'], ['3', '2', '1']]

在 N = 3 的情况下,这会按顺序遍历从 0 到 999 的所有整数,并选择正好有一个 1、正好有一个 2 和正好有一个 3 的整数。(这些是 123、132、213 , 231, 312, 321;从这里开始,将它们转换为列表就足够简单了。)

然而,对于 N >= 10,这显然失败了。

我考虑过先将数字转换为更高的基数,但事实证明,当我限制自己只使用列表理解时,这变得更加困难。

谁能想出一种方法来对 N >= 10 执行此操作?

最佳答案

一个不那么简单的函数式单行代码,除了 N 之外没有任何“外部”变量赋值。

N = 3
(lambda n: (lambda f, n: f(f, n))(lambda f, n: [p[:i]+[n]+p[i:] for p in f(f, n-1) for i in range(len(p)+1)] if n > 1 else [[1]], n))(N)

输出

[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3, 1, 2], [1, 3, 2], [1, 2, 3]]

关于python - 数字 1...N 的所有排列使用列表理解(没有 itertools),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72450373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com