从满足 SAGE 条件的列表中选择元组

Choosing tuples from a list that satisfy a condition in SAGE

我想创建一个程序,从满足特定条件的元组列表中选择特定的元组。

这是我正在尝试做的基本案例:

首先,我创建了一个长度为 3 的元组列表,坐标在集合 [-1,1]:

Tupes=Tuples([-1,1],3)

现在我正在尝试提取那些坐标总和为 1 的成员。我试过了 运行

[Tupes[k] for k in len(Tupes) if sum([Tupes[k][j] for j in range(len(Tupes[k]))])==1]

但收到错误

Error in lines 1-1 Traceback (most recent call last): File "/projects/sage/sage-7.5/local/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 995, in execute exec compile(block+'\n', '', 'single') in namespace, locals File "", line 1, in <module> TypeError: 'int' object is not iterable

我是 SAGE 和 python 的新手,所以这只是我正在努力学习的练习。

您的直接问题是您要进入 len(Tupes) 这只是一个数字,而不是 range(len(Tupes)) 这将是一个列表。您不能迭代数字,只能迭代列表。

也就是说,您还可以做一些其他事情来使它更紧密。这里是 one suggestion.

Tupes=Tuples([-1,1],3)
[Tupes[k] for k in range(Tupes.cardinality()) if sum(Tupes[k])==1]

比 kcrisman 的回答简单一些:

sage: Tupes=Tuples([-1,1],3)
sage: [k for k in Tupes if sum(k) == 1]
[[1, 1, -1], [1, -1, 1], [-1, 1, 1]]