#!/usr/bin/env python
#-*- encoding: utf-8 -*-
from itertools import compress, imap
def fun(lst):
min_number = 100000000
length = len(lst)
total = 2**length
record = None
f = lambda x:compress(lst, imap(int,bin(x)[2:].rjust(length,'0')))
for n in xrange(total):
plus = f(n)
minus = f(total-n-1)
tmp = abs(sum(plus) - sum(minus))
if tmp < min_number:
record = n
min_number = tmp
plus = list(f(record))
minus = list(f(total-record-1))
return (plus, minus, min_number)
def main():
print '(分组1, 分组2, 差值)'
print fun([1,2,3,1,4,10,7,5,23])
main()
拿了个list来穷举试了一下,Python 2.7.3测试通过。