所以这不是我遇到的排列,而是结果列表不等同于我开始的原始列表。 名单是这样的,
B=[[m, b], [c, g], [d, f]]
我用来获取所有排列的代码是这样的,以及结果,
C=list(itr.permutations(B))
C
[([m, b], [c, g], [d, f]),
([m, b], [d, f], [c, g]),
([c, g], [m, b], [d, f]),
([c, g], [d, f], [m, b]),
([d, f], [m, b], [c, g]),
([d, f], [c, g], [m, b])]
有没有办法不将内部列表放在括号中,而是放在方括号中,因为到目前为止 C[0] 与 B 不同,而实际上它们应该是相等的。
C[0]==B
False
我将字母(m,b,d等(定义为sympy中的符号,而不是字符串。 任何建议不胜感激。
您可以使用map()
将元组转换为列表:
>>> import itertools as itr
>>> B=[[m, b], [c, g], [d, f]]
>>> C = map(list, itr.permutations(B))
>>> C
[[['m', 'b'], ['c', 'g'], ['d', 'f']], [['m', 'b'], ['d', 'f'], ['c', 'g']], [['c', 'g'], ['m', 'b'], ['d', 'f']], [['c', 'g'], ['d', 'f'], ['m', 'b']], [['d', 'f'], ['m', 'b'], ['c', 'g']], [['d', 'f'], ['c', 'g'], ['m', 'b']]]
>>> C[0] == B
True
此外,如果您想将其保留为迭代器,您可以使用 itertoolsimap()
。
只需使用C[0][0] == B[0]
>>> print(C)
[(['m', 'b'], ['c', 'g'], ['d', 'f']), (['m', 'b'], ['d', 'f'], ['c', 'g']), (['c', 'g'], ['m', 'b'], ['d', 'f']), (['c', 'g'], ['d', 'f'], ['m', 'b']), (['d', 'f'], ['m', 'b'], ['c', 'g']), (['d', 'f'], ['c', 'g'], ['m', 'b'])]
>>> print(B)
[['m', 'b'], ['c', 'g'], ['d', 'f']]
>>> C[0][0]
['m', 'b']
>>> B[0]
['m', 'b']
>>> C[0][0] == B[0]
True
>>> C[0][1] == B[1]
True