增加列表的列表



给定整数 n>= m,我想使用集合 {1,...,n} 的元素构建长度 m 的所有递增列表的列表。

例如,如果 n= 4 且 m=2,我想要[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]].

有没有一种很好的方法可以用很少的 Python 代码来做到这一点?

我想建立一个高效的函数

def listOfLists(n, m):
????
return ? # the list of all increasing lists of m elements in {1, 2, ..., n}

谢谢!

备注:我基本上已经这样做了,但我的代码长得离谱https://sagecell.sagemath.org/?z=eJxVkcFuwyAQRO98xR5Bdqo66ikq-YJIvfRm5eDIuF2ZbBB21H5-FpYWh4PFmHmzHjy6Ccj9rp_34J2eWyBzUMArvQQLc384Zx1YeEd6NlkiywA76LL6-Ubv2ItnsJbPGiA-C5Ik9p0t3hScjI19ghHeJbBC4mw6Dq1UgST0PyO69R4pu5QauZPHZf2YTvxcNLUQSiuceMgRqA4pZC8tZx7Vv8p-ukUegQRxoC-nu5qSnS9DCI5GjXIhl2HBJdEVjk_wBel2xcHL56Qim7RM_yWmOzd1UGm_-UPbyplUKkSkVW9bv7WwN-YBIpR8dQ==&lang=python&interacts=eJyLjgUAARUAuQ==

使用迭代工具中的组合

In [29]: from itertools import combinations
In [30]: def get_list(n, m):
...:     return [i for i in combinations(range(1, n+1), m)]
In [31]: get_list(4, 2)
Out[31]: [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

您可以使用itertools

from itertools import combinations
m = 2
n = 4
list(combinations(list(range(1, n+1)), m))

编辑:如果你想要一个函数,只需返回它:

from itertools import combinations
m = 2
n = 4
def listOfLists(n, m):
return list(combinations(list(range(1, n+1)), m))
listOfLists(n, m)

我认为这可能有效:

n=4
m=2
result=[]
for i in range(1,n):
for j in range(i+1,n+1):
result.append([i,j])

最新更新