Python 重写代码以使用列表理解对初始列表中的值求和

Python 重写代码以使用列表理解对初始列表中的值求和,python,list,for-loop,list-comprehension,addition,Python,List,For Loop,List Comprehension,Addition,我编写了以下代码: rand_map, lst = [2, 2, 6, 6, 8, 11, 4], [] for i in range(len(rand_map)): num = rand_map[i] lst.append(num) for j in range(i+1, len(rand_map)): assembly = num + rand_map[j] num += rand_map[j] lst.appen

我编写了以下代码:

rand_map, lst = [2, 2, 6, 6, 8, 11, 4], []

for i in range(len(rand_map)):

    num = rand_map[i]
    lst.append(num)

    for j in range(i+1, len(rand_map)):
        assembly = num + rand_map[j]
        num += rand_map[j]
        lst.append(assembly)
print(sorted(lst))
这将产生以下输出:

[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]

我一直在尝试使用列表理解重写这段代码,但我不知道如何重写。我尝试了多种方法(标准和itertools),但我就是做不好。我将非常感谢你的帮助

我想出了两种解决这个问题的方法:

方法1-普通清单理解 在这种方法中,我们迭代两个变量,
i
j
,并计算这两个索引之间元素的
sum

代码:

>>> rand_map = [2, 2, 6, 6, 8, 11, 4]
>>> sorted([sum(rand_map[i:i+j+1]) for i in range(len(rand_map)) for j in range(len(rand_map)-i)])
[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]
from itertools import islice

def n_wise(iterable, n):
    return zip(*(islice(iterable, i, None) for i in range(n)))

print(sorted([sum(x) for n in range(len(rand_map)) for x in n_wise(rand_map, n+1)]))
[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]
方法2-Itertools 在这种方法中,我们使用itertools配方从以n方式迭代
rand_map
列表,并相应地计算总和。这与第一种方法的工作方式大致相同,但有点简单

代码:

>>> rand_map = [2, 2, 6, 6, 8, 11, 4]
>>> sorted([sum(rand_map[i:i+j+1]) for i in range(len(rand_map)) for j in range(len(rand_map)-i)])
[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]
from itertools import islice

def n_wise(iterable, n):
    return zip(*(islice(iterable, i, None) for i in range(n)))

print(sorted([sum(x) for n in range(len(rand_map)) for x in n_wise(rand_map, n+1)]))
[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]
输出:

>>> rand_map = [2, 2, 6, 6, 8, 11, 4]
>>> sorted([sum(rand_map[i:i+j+1]) for i in range(len(rand_map)) for j in range(len(rand_map)-i)])
[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]
from itertools import islice

def n_wise(iterable, n):
    return zip(*(islice(iterable, i, None) for i in range(n)))

print(sorted([sum(x) for n in range(len(rand_map)) for x in n_wise(rand_map, n+1)]))
[2, 2, 4, 4, 6, 6, 8, 8, 10, 11, 12, 14, 14, 15, 16, 19, 20, 22, 23, 24, 25, 29, 31, 33, 35, 35, 37, 39]

如果它看起来对列表理解来说太复杂,那么对于列表理解来说它实际上可能太复杂了。