【问题标题】:Recursive List containing Lists包含列表的递归列表
【发布时间】:2015-10-11 06:41:39
【问题描述】:
from random import choice

def Number_recursive(N):
    if N < 0:
        raise ValueError('N must be positive')
    if N == 0:
        return []
    return [choice((0, 1))] + Number_recursive(N-1)

如何在此列表中添加另一个列表。
目前它输出让我们把 N 等于 4 [1,0,0,1] 当然随机。

但我想让它读出包含N 列表数量的列表。目标:

[ [0,1,1,0],[1,0,0,1],[1,0,1,0],[0,0,0,1] ]

【问题讨论】:

  • 您想要一个大小为N x N 的列表?
  • @Anand S Kumar 正确

标签: python list python-3.x recursion


【解决方案1】:

您可以这样做的一种方法是使用列表推导来创建子列表,而不是 [choice((0, 1))] 。示例 -

from random import choice

def Number_recursive(N,initialN=None):
    initialN = initialN or N
    if N < 0:
        raise ValueError('N must be positive')
    if N == 0:
        return []
    return [[choice((0, 1)) for _ in range(initialN)]] + Number_recursive(N-1,initialN)

演示 -

>>> from random import choice
>>>
>>> def Number_recursive(N,M=None):
...     M = M or N
...     if N < 0:
...         raise ValueError('N must be positive')
...     if N == 0:
...         return []
...     return [[choice((0, 1)) for _ in range(M)]] + Number_recursive(N-1,M)
...
>>> Number_recursive(4)
[[0, 0, 1, 0], [0, 1, 1, 1], [1, 1, 0, 0], [1, 0, 1, 0]]

【讨论】:

  • 感谢它的工作! .... 只是因为我喜欢头痛,说我想替换 for _ in 并想递归地做到这一点。有什么想法吗?
  • 您可以创建一个新的递归函数,将其传递给 M 并让它创建您将要放入的列表,就像 return [newRecursiveFunc(initialN)] + Number_recursive(N-1,initialN) 一样。而且这个新的递归函数将与您的原始函数完全相同。
  • 我不认为我安静地跟随...这是我到目前为止所拥有的[[choice((0, 1))] + Number_recursive(N-1)] + Number_recursive(N-1,N)
  • 不,我的意思是使用我上面给出的函数,只需将返回行替换为 - return [newRecursiveFunc(initialN)] + Number_recursive(N-1,initialN) 。然后定义一个名为newRecursiveFunc 的函数,它的代码与你原来的Number_recursive() 相同。
【解决方案2】:

你可以试试这样的,希望对你有帮助。

from random import choice
N = 4
def Number_recursive(N):
    if N < 0:
        raise ValueError('N must be positive')
    if N == 0:
        return []
    return [choice((0, 1))] + Number_recursive(N-1)

result = []
for i in range(0, N):
    result.append(Number_recursive(N))

print result

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2019-12-04
    • 2019-09-23
    • 2012-09-06
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多