递增列表列表

List of increasing lists

给定整数 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==

我认为这可能有效:

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

您可以使用 itertools:

from itertools import combinations

m = 2
n = 4

list(combinations(list(range(1, n+1)), m))

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

from itertools import combinations

m = 2
n = 4

def listOfLists(n, m):
    return list(combinations(list(range(1, n+1)), m))

listOfLists(n, m)

使用 itertools 中的组合

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)]