python - 关于返回组合N取K的问题
问题描述
我正在尝试列出k
列表a
1 到n
. 我找到了返回所有组合的简洁代码。
def combs(a):
if len(a) == 0:
return [[]]
cs = []
for c in combs(a[1:]):
cs += [c, c+[a[0]]]
return cs
有没有办法可以修改它,以便我可以限制它返回的列表长度?
如果:
k = 3
n = 5
它只会从以下位置返回长度为 3 的组合:
lst = [1, 2, 3, 4, 5]
因此回报将是:
[[1, 2], [1, 3], [2, 3]]
我不允许使用任何导入作为限制
解决方案
我添加了一个新参数k
。
注意这一行:
if len(c) >= k: return cs
如果数组大于 ,这将提前中断循环k
。
def combs(a, k, l=0):
if len(a) == 0:
return [[]]
cs = []
for c in combs(a[1:], k, l+1):
cs += [c, c+[a[0]]]
if l == 0:
css = []
for i in cs:
if len(i) == k:
css += [i]
return css
return cs
print(combs([1, 2, 3, 4, 5], 3))
因此,当 时k == 3
,代码返回以下内容:
[[3, 2, 1], [4, 2, 1], [4, 3, 1], [4, 3, 2], [5, 2, 1], [5, 3, 1], [5, 3, 2], [5, 4, 1], [5, 4, 2], [5, 4, 3]]
推荐阅读
- python - 在python函数中返回多个列表的适当方法
- angular - Ionic/Angular Capacitor plugin & firebase FB auth : FacebookLogin 没有网络实现错误
- javascript - .replace 函数不会替换 JavaScript 中的数字?
- reactjs - 一些获取的 url 在 react useEffect 中触发重新加载
- python - Python-Heroku - aiohttp 3.7.3 要求 chardet<4.0,>=2.0,但您将拥有不兼容的 chardet 4.0.0
- caching - infinispan.xml 中的分布式缓存 infinispan 和 varibale 属性
- javascript - jQuery - 使用多数据搜索选择器
- c++ - 拒绝 C 规则“条件表达式不产生左值”的动机是什么?
- javascript - 我无法在单个浏览器中运行所有 webdriver.io 规范文件
- batch-file - 如何正确使用路径作为参数?