【问题标题】:Creating all lists of length "n" from a list of q elements从 q 个元素的列表中创建所有长度为“n”的列表
【发布时间】:2016-04-19 15:01:38
【问题描述】:

几天来,我一直在尝试找到一种方法来从“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)

【问题讨论】:

  • 有点不清楚的问题。你想要 q 个整数的所有排列达到固定长度 n 吗?
  • 没有。假设 q=2 和 n=3 那么我希望我的函数输出 [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[ 1,0,0],[1,0,1],[1,1,0],[1,1,1]]
  • 好的,所以小于 q 的整数的固定长度 n 的排列。
  • 没错。就像我在问题中所说的那样,我当前的函数将打印我正在寻找的内容,但我需要一种方法将所有打印的对象放入一个列表中。

标签: python list sage


【解决方案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]]

【讨论】:

    【解决方案2】:

    没有鼠尾草:

    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]
    

    【讨论】:

    • 这不会返回所有排列,例如结果包含(0, 0, 1),但不包含(1, 0, 0)
    • @JohnPalmieri 是的,我使用了错误的功能:\ 现在已修复。
    猜你喜欢
    • 2020-08-03
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2018-03-11
    • 1970-01-01
    • 2018-05-27
    相关资源
    最近更新 更多