【发布时间】:2018-04-13 14:56:14
【问题描述】:
我一直在环顾四周,但没有完全找到我的具体问题的答案。使我的问题具体的原因是我试图仅使用列表理解。
问题:
使用以下代码:
[print(k,l,m) for k in range(3) for l in range(2) for m in range(1)]
我得到了输出:
0 0 0
0 1 0
1 0 0
1 1 0
2 0 0
2 1 0
这适用于 n=3 或任何硬编码的 n。但是,我想做的是:
[print(k1,k2,...,kn) for k1 in range(n) for k2 in range(n-1) .. for kn in range(1)].
我希望有人能立即看到答案——谢谢!
编辑 解决方案发布在下面,但也为了清楚我希望的格式,这是我使用它打印出编码元组的方式:
n=3
[print(x) for x in itertools.product(*[list(range(i)) for i in range(n,0,-1)])]
(为简单起见,没有在范围上使用反向)。
【问题讨论】:
-
您的输出与您希望看到的有何不同?请提供所需的输出
-
@bcr 我举了一个 n=3 的例子,但我希望能够对任何非硬编码的 n 做到这一点。
-
...然后列出压缩不是要走的路。
-
“仅列表推导”是什么意思?您使用了
print和range,它们不是列表推导式。我可以在我的解决方案中使用itertools.product吗?我可以在列表理解中定义递归 lambda 函数吗?无论如何,在列表理解中做所有事情有什么意义? -
如果你从中得到了什么,应该知道这不是列表推导应该做的事情。没有真正的“通过列表理解变得更好”这样的事情。 99% 的列表推导应该是简单的。复杂的列表推导应该是普通的循环或一堆较小的列表推导。
标签: python list recursion list-comprehension