从 q 个元素的列表中创建长度为 "n" 的所有列表
Creating all lists of length "n" from a list of q elements
几天来,我一直在尝试寻找一种方法来从 "q" 元素的列表中创建所有长度为 "n" 的列表。到目前为止,我已经能够让 sage 打印我想要获得的所有列表。然而,因为我需要这些列表用于另一个程序,所以我需要我的程序输出所有这些列表的列表,而不是仅仅让 Sage 打印列表。我到目前为止是:
def XUniv(q,x,n):
"""
:param q: is your alphabet size
:param x: is a zero vector of any length
:param n: is len(x)-1
"""
for i in range(q):
x[n]=i
if n==0:
print x
else:
XUniv(q,x,n-1)
这样的东西是你想要的吗?
sage: q=1
sage: n=3
sage: L = IntegerListsLex(min_part=0, max_part=q, length=n)
sage: list(L)
[[1, 1, 1],
[1, 1, 0],
[1, 0, 1],
[1, 0, 0],
[0, 1, 1],
[0, 1, 0],
[0, 0, 1],
[0, 0, 0]]
没有圣人:
import itertools
def all_lists_from_q_elements(q, n):
all_lists_iter = itertools.product(tuple(range(q)), repeat=n)
return [list(l) for l in all_lists_iter]
几天来,我一直在尝试寻找一种方法来从 "q" 元素的列表中创建所有长度为 "n" 的列表。到目前为止,我已经能够让 sage 打印我想要获得的所有列表。然而,因为我需要这些列表用于另一个程序,所以我需要我的程序输出所有这些列表的列表,而不是仅仅让 Sage 打印列表。我到目前为止是:
def XUniv(q,x,n):
"""
:param q: is your alphabet size
:param x: is a zero vector of any length
:param n: is len(x)-1
"""
for i in range(q):
x[n]=i
if n==0:
print x
else:
XUniv(q,x,n-1)
这样的东西是你想要的吗?
sage: q=1
sage: n=3
sage: L = IntegerListsLex(min_part=0, max_part=q, length=n)
sage: list(L)
[[1, 1, 1],
[1, 1, 0],
[1, 0, 1],
[1, 0, 0],
[0, 1, 1],
[0, 1, 0],
[0, 0, 1],
[0, 0, 0]]
没有圣人:
import itertools
def all_lists_from_q_elements(q, n):
all_lists_iter = itertools.product(tuple(range(q)), repeat=n)
return [list(l) for l in all_lists_iter]