Python:在尝试使用列表上Symphy的循环函数时遇到问题
我正在尝试使用Symphy中的cycle函数来简化这样一个列表Python:在尝试使用列表上Symphy的循环函数时遇到问题,python,permutation,sympy,Python,Permutation,Sympy,我正在尝试使用Symphy中的cycle函数来简化这样一个列表 from sympy.combinatorics import Permutation, Cycle Cycle(1,2,3)(3,4,5)(7) 输出应该是 循环(1,2,4,5,3)(7) 然而,当我尝试使用 a_list = [[1,2,3,4],[4,5,7],[3,4,2]] b = Cycle(a_list) print(b) 我得到这个错误 “tuple”对象不可调用 我知道我在循环中输入了错误类型的变量,但有人
from sympy.combinatorics import Permutation, Cycle
Cycle(1,2,3)(3,4,5)(7)
输出应该是
循环(1,2,4,5,3)(7)
然而,当我尝试使用
a_list = [[1,2,3,4],[4,5,7],[3,4,2]]
b = Cycle(a_list)
print(b)
我得到这个错误
“tuple”对象不可调用
我知道我在循环中输入了错误类型的变量,但有人能告诉我如何处理循环吗。这是一个完全满足我需要的函数,我只需要找到一种方法将列表转换为循环友好型。谢谢你的帮助 我想你在找这样的东西:
a_list=[[1,2,3,4],[4,5,7],[3,4,2]]
b=循环()
对于a_列表中的i:
b=b(*元组(i))
印刷品(b)
要转换为列表,请尝试b.list()
解释
元组(i)
将[1,2,3,4]
转换为(1,2,3,4)
假设您有一个函数foo
。运行foo(1,2,3,4)
与运行foo(*(1,2,3,4))
一个简单的例子:
a_list=[[1,2],[3,4]]
b=循环()
在第一次迭代(i=[1,2]
)中,调用b(*tuple(i))
与调用b(1,2)
是相同的,因为b=Cycle()
,实际上是Cycle()(1,2)
,这与Cycle(1,2)
是相同的
在第二次迭代(i=[3,4]
)中,调用b(*tuple(i))
实际上是b(3,4)
,即循环(1,2)(3,4)
希望这个例子有点道理。这有点混乱,因为括号太多了。如果您仍然感到困惑,您可能希望一步一步地运行代码(可能需要使用调试器)以帮助了解发生了什么。循环
(如docstring中所述)为输入提供了一些微妙的优势,但是如果您显示的循环列表中存在所有元素,然后简单地将它们传递给Permutation
就足够了
记住顺序很重要:
>>> Cycle(1,3)(3,2)
Cycle(1, 2, 3)
>>> Cycle(2,3)(1,3)
Cycle(1, 3, 2)
>>> p = Permutation([[1,3],[3,2]])
>>> Cycle(p)
Cycle(1, 2, 3)
>>> p.list() == _.list() == [0, 2, 3, 1]
请注意,排列将允许您显式请求array\u form
或cyclic\u form
,而Cycle只允许list()
方法:
>>> p.array_form
[0, 2, 3, 1]
>>> p.cyclic_form
[[1, 2, 3]]
您的目标是运行
循环(1,2,3,4)(4,5,7)(3,4,2)
以获得循环(1,3,5,7,2,4)
的输出吗?如果是这样,您只需要将嵌套列表转换为嵌套元组。如果这就是你想要的,我会试着发布一个答案,告诉你怎么做。是的,这就是我想要做的。然后,我想把这个循环,或者如果我以一个循环结束的话,两个或三个循环,再次转换成一个列表。