gpt4 book ai didi

python - 使用堆栈排列列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:04 26 4
gpt4 key购买 nike

我正在尝试找到一种无需递归或使用 itertools 即可枚举数字列表的所有组合的方法。我想出了一个可行的解决方案,但我认为它最终变成了一个递归函数。我是 Python 的新手,不确定如何在没有递归的情况下完成这项工作。

感谢任何帮助,因为我认为我仍然看不出两者之间的区别。

result = []

def permutation(li):
if len(li) == 1:
result.append(li[0])
print (result)
result.pop()
return

for i in range(0,len(li)):
result.append(li[i])
permutation(li[:i] + li[i+1:])
result.pop()

permutation([1,2,3])

最佳答案

在不使用递归的情况下,想出一种“就像那样”产生所有排列的算法并不是那么直观。

但是存在几种不同的此类算法。看看Heap's algorithm例如:

def permutation(li):
n = len(li)
c = [0] * n

print(li)
i = 1
while i < n:
if c[i] < i:
j = c[i] if i % 2 else 0
li[j], li[i] = li[i], li[j]
print(li)
c[i] += 1
i = 1
else:
c[i] = 0
i += 1

关于python - 使用堆栈排列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801420/

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