python - 如何在没有 for 循环的情况下将 itertools 组合作为列表列表
问题描述
我试图让一个itertools.combinations
返回函数内的列表列表,但是我的代码返回一个元组列表......
array = list(combinations(a, m))
returns:
[(1, 2), (1, 3), (2, 3)]
我可以通过使用 for 循环来获得所需的输出:
array1 = []
for i in array:
array1.append(list(i))
return array1
returns:
[[1, 2], [1, 3], [2, 3]]
但是我不想在函数中使用 for 循环,因为还有其他 for 循环,我想缩短时间复杂度。
如何在itertools.combinations
不使用 for 循环的情况下获取此列表列表?在列表理解中使用循环也会增加时间。我在 SO 帖子或 python 网站上找不到我想要的答案。
解决方案
渐近复杂度将始终保持不变。您将无法绕过将每个组合转换为列表。你可以懒惰地这样做:
from itertools import combinations
def list_combs(iterable, k):
return map(list, combinations(iterable, k))
您现在可以将list_combs
其用作 的替代品combinations
,列表转换开销仅在使用下一个组合时才延迟应用。
for c in list_combs([1, 2, 3], 2):
print(c)
[1, 2]
[1, 3]
[2, 3]
推荐阅读
- java - 确定二进制文件的环境和版本
- tensorflow - 具有持续训练/模型更新的机器学习(张量流或其他)
- excel - 从 Python 或 Excel 中的字符串中提取多个数值
- javascript - 函数通过调用自身来复制JavaScript中的对象,需要帮助理解逻辑
- javascript - 如何使用 Mongoose 在 AngularJS 中创建 PUT 函数
- php - 为什么 auth/login 路径返回 404 错误?
- java - 如何将我的 SpringBoot 后端连接到颤振?
- sql - 尝试生成一个唯一 ID,该 ID 既不是整数也不是纯文本中的其他值
- linux - 无法在 Ubuntu (AWS) 上截取屏幕截图图像(Selenium 测试),但相同的代码可以在 Windows 机器上运行?
- google-cloud-run - 请求取消不会传播到云运行容器