我如何生成如下组合? [英] how can i generate combinations as like below?

查看:43
本文介绍了我如何生成如下组合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个清单

a=[1,2,3] 

我想在这个列表上执行组合(相邻数字),我想乘以每个组合,如下所示

I want to perform combinations(adjacent numbers) on this list and I want multiplication each combination like below

1
1 2
2
1 2 3
2 3
3

在这之后,我要表演

a) 1*1= 1 
b) 1*2+2*2= 6
c) 2*2= 4
d) 1*3+2*3+3*3= 18
e) 2*3+3*3= 15
f) 3*3= 9

预期输出

[1,2,4,18,15,9]

这是我尝试的代码:

def grouper(input_list, n = 2):
    for i in xrange(len(input_list) - (n - 1)):
        yield input_list[i:i+n] 

推荐答案

a = [1,2,3]

for item in [a[0:m+1] for m in range(len(a))]:
    for n in  range(len(item)):
        result.append(item[n:])
        test.append(sum([k * len(item) for k in item[n:]]))

print result
print test

输出

[[1], [1, 2], [2], [1, 2, 3], [2, 3], [3]]

[1, 6, 4, 18, 15, 9]

更多长度

a = [1,2,3,4]

输出

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

[1, 6, 4, 18, 15, 9, 40, 36, 28, 16]

简单使用for循环

a = [1,2,3] 
tmp = []

for m in range(len(a)):
    tmp.append( a[0:m +1])

result = []
test = []


for item in tmp:
    for n in  range(len(item)):
        result.append(item[n:])
        test.append(sum([k * len(item) for k in item[n:]]))

print tmp
print result
print test

输出

[[1], [1, 2], [1, 2, 3]]

[[1], [1, 2], [2], [1, 2, 3], [2, 3], [3]]

[1, 6, 4, 18, 15, 9]

这篇关于我如何生成如下组合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆