python - 将列表附加到另一个列表时遇到问题

标签 python list loops

我有这段代码,它接受一个数字列表并将所有加起来为 21 的数字分组在一起。我的问题是,最终我希望这些数字都成为列表中的列表,但我很难实现这一点。任何建议将不胜感激

def twentyone(seq, groups = []):
goal = 21
s = sum(groups)
final = []
if s == goal:
    final.append(groups)
    print (final)
if s >= goal:
    return

for i in range(len(seq)):
    n = seq[i]       
    remaining = seq[i+1:]
    twentyone(remaining, groups + [n])


#
seq = [1, 5, 6, 7, 10, 2, 11]
(twentyone(seq))

当前输出是:

[[1, 5, 6, 7, 2]]
[[1, 7, 2, 11]]
[[5, 6, 10]]
[[10, 11]]

我希望输出是:

[[1, 5, 6, 7, 2], [1, 7, 2, 11], [5, 6, 10], [10, 11]]

最佳答案

每次递归调用自身时,您都会创建新的final列表。您只需将其作为默认参数传递即可。

def twentyone(seq, groups = [], final = []): #default final list
    goal = 21
    s = sum(groups)

    if s == goal:
        final.append(groups)

    if s >= goal:
        return

    for i in range(len(seq)):
        n = seq[i]       
        remaining = seq[i+1:]
        twentyone(remaining, groups + [n])

    return final


seq = [1, 5, 6, 7, 10, 2, 11]
print twentyone(seq)

结果:-

[[1, 5, 6, 7, 2], [1, 7, 2, 11], [5, 6, 10], [10, 11]]
<小时/>

但是上述解决方案将导致每次调用 twentyone 函数时最终列表都会增长。因此,我们可以仅在第一次使用 first_call 标志调用时创建一个新的 final 列表,如下所示:

def twentyone(seq, groups = None, final = None, first_call=True): 

    if not groups:
        groups = []

    if first_call:
        final = []

    goal = 21
    s = sum(groups)

    if s == goal:
        final.append(groups)

    if s >= goal:
        return

    for i in range(len(seq)):
        n = seq[i]       
        remaining = seq[i+1:]
        twentyone(remaining, groups + [n], final, False)

    return final


seq = [1, 5, 6, 7, 10, 2, 11]
print twentyone(seq)
print twentyone(seq)

产量:

[[1, 5, 6, 7, 2], [1, 7, 2, 11], [5, 6, 10], [10, 11]]
[[1, 5, 6, 7, 2], [1, 7, 2, 11], [5, 6, 10], [10, 11]]

关于python - 将列表附加到另一个列表时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271274/

相关文章:

arrays - 无法修改作为循环参数传递的 1d numpy 数组

python - 在嵌套字典的每个键中添加相反数量的值

python - 使用 Flask 将 URL 加载到 iFrame

python - 打包库的正确方法,以便它在不带前导包名称的情况下正确导入

python - 将内部列表的元素相乘作为列表理解

r - 在 R 中绘制来自 tapply 输出的数据

Javascript 在 forEach 中使用 if 语句更改变量

python - 如何在databricks作业中自动导出仪表板

python - 类里面奇怪的列表行为

loops - 如何在 Graphviz 流程图中创建循环?