获取列表中嵌套元素的所有排列 - python 2.



所以这不是我遇到的排列,而是结果列表不等同于我开始的原始列表。 名单是这样的,

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

最新更新