Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在尝试使用列表上Symphy的循环函数时遇到问题_Python_Permutation_Sympy - Fatal编程技术网

Python:在尝试使用列表上Symphy的循环函数时遇到问题

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”对象不可调用 我知道我在循环中输入了错误类型的变量,但有人

我正在尝试使用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”对象不可调用


我知道我在循环中输入了错误类型的变量,但有人能告诉我如何处理循环吗。这是一个完全满足我需要的函数,我只需要找到一种方法将列表转换为循环友好型。谢谢你的帮助

我想你在找这样的东西:

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)
的输出吗?如果是这样,您只需要将嵌套列表转换为嵌套元组。如果这就是你想要的,我会试着发布一个答案,告诉你怎么做。是的,这就是我想要做的。然后,我想把这个循环,或者如果我以一个循环结束的话,两个或三个循环,再次转换成一个列表。