列表项的python连接组合

标签 python list combinations

我有一个值列表 [1,2,3,4,5,...],我想返回所有可能的连接组合的列表使用列表理解、numpy 或任何有效的方法。

通过连接,我的意思是列表中的项目对应该在组合中保持它们的邻接关系(不一定是具有相邻值的整数彼此相邻,尽管这样没关系)。

明确地说,这是我想要返回的列表[1,2,3,4,5]:

[[1,2,3,4,5],
[1,2,3,4],
[2,3,4,5],
[1,2,3],
[2,3,4],
[3,4,5],
[1,2],
[2,3],
[3,4],
[4,5],
[1],
[2],
[3],
[4],
[5]]

以下是我想要的项目类型:

[[1,2,3,5],
[1,3,4,5],
...]

我看过很多关于获得所有可能组合的帖子,但我还没有看到有人提出有关具有连通性约束的组合的问题。有什么想法吗?

最佳答案

这是列表理解的一种方式:

>>> lst = [6, 7, 8, 9]
>>> [lst[i:j] for j in range(len(lst)+1) for i in range(j)]
[[6], [6, 7], [7], [6, 7, 8], [7, 8], [8], [6, 7, 8, 9], [7, 8, 9], [8, 9], [9]]

或者如果您重视顺序并且我从您的示例中猜对了:

>>> [lst[i:i+leng] for leng in range(len(lst), 0, -1) for i in range(len(lst)-leng+1)]
[[6, 7, 8, 9], [6, 7, 8], [7, 8, 9], [6, 7], [7, 8], [8, 9], [6], [7], [8], [9]]

或者使用itertools.combinations:

>>> [lst[i:j] for i, j in combinations(range(len(lst)+1), 2)]
[[6], [6, 7], [6, 7, 8], [6, 7, 8, 9], [7], [7, 8], [7, 8, 9], [8], [8, 9], [9]]

或者甚至根本没有任何列表理解(但现在我变得愚蠢了:-)

>>> list(map(lst.__getitem__, starmap(slice, combinations(range(len(lst)+1), 2))))
[[6], [6, 7], [6, 7, 8], [6, 7, 8, 9], [7], [7, 8], [7, 8, 9], [8], [8, 9], [9]]

关于列表项的python连接组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429062/

相关文章:

python - 为什么附加到一个列表也会附加到我的列表中的所有其他列表?

python - 迭代列表的奇怪速度差异

c# - 子列表的补充列表

php - 从数组中获取所有可能的字符串组合到特定长度的算法

algorithm - 显示方程 x1+x2+...+xk = n 的所有正解

python - 如何使用 Numpy/Keras 将加载图像的一部分置零?

python 3 : Removing an empty tuple from a list of tuples

python - 内存优化,用于生成大于 RAM 的数据

python - 列表排序/修改问题

java - 编辑递归算法: passing array instead of string as an argument to save results instead of printing