python - 如何使用python循环函数更改列表中元素的顺序?
问题描述
我有一个清单:
s=[[[’A’, ’B’], [’C’]],[[’A’], [’B’]], [[’B’], [’A’]]]
这个列表的长度是 3,这意味着我应该得到这个列表的 6 个不同的顺序:
这意味着结果应该是
[[[’A’, ’B’], [’C’]],[[’A’], [’B’]], [[’B’], [’A’]]]
[[[’A’], [’B’]],[[’A’, ’B’], [’C’]], [[’B’], [’A’]]]
[[[’B’], [’A’]],[[’A’], [’B’]],[[’A’, ’B’], [’C’]]]
.....
我的代码是:
COUNT=0
order = []
def perm(n,begin,end):
global COUNT
if begin>=end:
order.append(n)
COUNT +=1
else:
i=begin
for num in range(begin,end):
n[num],n[i]=n[i],n[num]
perm(n,begin+1,end)
n[num],n[i]=n[i],n[num]
return order
F = [[['A', 'B'], ['C']],[['A'], ['B']], [['B'], ['A']]]
perm(F,0,len(F))
但是这个结果是错误的,它返回了六次相同的列表!
解决方案
我无法判断您的代码有什么问题,但您可以使用itertools
标准库中的模块来获得预期的结果:
import itertools
F = [[['A', 'B'], ['C']],[['A'], ['B']], [['B'], ['A']]]
for item in itertools.permutations(F):
print(item)
输出:
([['A', 'B'], ['C']], [['A'], ['B']], [['B'], ['A']])
([['A', 'B'], ['C']], [['B'], ['A']], [['A'], ['B']])
([['A'], ['B']], [['A', 'B'], ['C']], [['B'], ['A']])
([['A'], ['B']], [['B'], ['A']], [['A', 'B'], ['C']])
([['B'], ['A']], [['A', 'B'], ['C']], [['A'], ['B']])
([['B'], ['A']], [['A'], ['B']], [['A', 'B'], ['C']])
推荐阅读
- mysql - 将规范化的逗号分隔字段插入新表
- javascript - 在 HTML 中舍入十进制值
- c# - 如何在 C# 运行时保存多个用户设置
- javascript - 为什么单击动态表单域中的一个下拉列表会自动触发另一个表单域中的另一个下拉列表
- linux-device-driver - 使用 xilinx versal R5 处理器无法在接收器端接收 axidma 中断
- sql - 基于多列的全文搜索 VS 模糊搜索
- android - 我的所有应用程序的 Google Play 应用程序签名密钥是否相同,还是每个应用程序都使用自己的密钥进行签名?
- java - Eclipse:Gradle 源文件夹迁移破坏了 JUnit 测试资源
- python-3.x - 我在 VS Code 中收到此错误:conda:术语“conda”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
- reporting-services - SSRS - 按项目创建多图表,每行 3 个图表,如有必要,可无限行。(不是子报告)