python - 在 python 列表中获取对:一个项目和其余项目
问题描述
我想做这个
from some_cool_library import fancy_calculation
arr = [1,2,3,4,5]
for i, item in enumerate(arr):
the_rest = arr[:i] + arr[i+1:]
print(item, fancy_calculation(the_rest))
[Expected output:] # some fancy output from the fancy_calculation
12.13452134
2416245.4315432
542.343152
15150.1152
10.1591
但我想知道是否有更 Pythonic 的方式或现有的库来获取如上所示的对。
当前实现的问题是我们需要大约 O(n) 更多的内存来存储the_rest
变量。有什么方法可以在没有额外内存分配的情况下做到这一点?
for item, the_rest in some_cool_function(arr):
print(item, fancy_calculation(the_rest))
解决方案
如果您只需要其余部分(从您的编辑看来),您可以使用itertools.combinations
获取具有一定数量元素的所有组合,如下所示:
from itertools import combinations
arr = [1, 2, 3, 4, 5]
for combination in combinations(arr, len(arr)-1):
print(sum(combination))
注意:订单与您提供的相反,如果订单很重要,您可以在使用前反转 arrarr[::-1]
推荐阅读
- microsoft-graph-api - revokeSignInSessions 不撤销会话 cookie
- javascript - 如何在javascript中正确拼接视频blob
- javascript - 在开发和崩溃 html5 画布元素期间未使用 Webpack 加载静态图像
- c++ - MSVC 中的可能错误与编译时 NaN 比较
- tensorflow - BN层中的Keras训练和可训练属性
- python-3.x - 如何从主 GUI 生成另一个 GUI 以允许用户为主 GUI 设置一些参数
- java - 如何使用嵌套循环在 Spring Boot 中导航未知的嵌套对象
- python - 如何使用openpyxl在excel表格中打印大小为2的列表?
- nginx - 为什么对 nginx 网络服务器(使用 lua)使用 Fast CGI 以及设置什么
- apache-spark - 数据框连接返回 pyspark 的空结果