首页 > 解决方案 > 在 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))

标签: pythonperformance

解决方案


如果您只需要其余部分(从您的编辑看来),您可以使用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]


推荐阅读