鱼C论坛

 找回密码
 立即注册
查看: 7315|回复: 23

[技术交流] Python:每日一题 176

[复制链接]
发表于 2018-4-12 20:49:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-4-13 15:05 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
将一个整数列表分隔为两个列表,使两个列表数字之和的差值的绝对值最小。
例如列表为[872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
可以分割为[872, 4345, -729, 0, 9988]和[123456, 7171, 44, -3]
也可以分割为[872, 4345, -729, 0, 9988, 12]和[3456, 7171, 44, -3]
即可以在数字之间分隔,也可以在数字内部按位分隔。

注:分隔不能调整前后的次序,-12不能分割为-和12

评分

参与人数 1鱼币 +1 收起 理由
天圆突破 + 1 是差值的绝对值还是列表前-列表后的差值?

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-12 21:55:19 | 显示全部楼层
本帖最后由 塔利班 于 2018-4-13 18:21 编辑
def ssum(s):
    if s=='':
        return 0
    else:
        return eval(s)
def cut(x):
    L=[]
    for i in range(len(x)):
        a=x[i]
        l=len(str(a))
        if a>=0:
            for j in range(0,l+1):
                L.append((i,j,abs(sum(x[:i])+ssum(str(a)[:j])-ssum(str(a)[j:])-sum(x[i+1:]))))
        else:
            for j in range(2,l+1):
                L.append((i,j,abs(sum(x[:i])+ssum(str(a)[:j])-ssum(str(a)[j:])-sum(x[i+1:]))))
    a,b=sorted(L,key=lambda s:s[2])[0][:2]
    if b==0:
        return x[:a],x[a:]
    elif b==len(str(x[a])):
        return x[:a+1],x[a+1:]
    else:
        return x[:a]+[ssum(str(x[a])[:b])],[ssum(str(x[a])[b:])]+x[a+1:]

print(cut([11,-22,33,-44,55,-66,77,-88]))
print(cut(list(range(10))))
print(cut([1]))
print(cut([872,4345,-729,0,9988,123456,7171,44,-3]))
print(cut([1,-2,1]))
print(cut([5,2,1,2]))
print(cut([5,-12,2]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-12 22:41:42 | 显示全部楼层
本帖最后由 第四时空 于 2018-4-12 23:17 编辑
def func(li: list) -> tuple:
    max_abs = abs(max(li))
    min_abs = abs(min(li))
    difference_value = max_abs if max_abs > min_abs else min_abs
    result_left_list = []
    result_right_list = []

    for list_index, elem in enumerate(li):
        left_list = li[:list_index]
        right_list = li[list_index + 1:]

        str_elem = str(elem)
        for elem_index, e in enumerate(str_elem):
            if e == "-":
                continue

            left_elem = str_elem[:elem_index + 1]
            right_elem = str_elem[elem_index + 1:]

            value = sum(left_list, int(left_elem or 0)) - sum(right_list, int(right_elem or 0))
            if abs(value) <= difference_value:
                difference_value = abs(value)
                result_left_list = left_list + ([int(left_elem)] if left_elem != "" else [])
                result_right_list = ([int(right_elem)] if right_elem != "" else []) + right_list

    return result_left_list, result_right_list


if __name__ == "__main__":
    list_1 = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
    list_2 = [1, 1, 1, 1]
    list_3 = [0, 0, 0, 0, 0]
    list_4 = [-2, -2, -2, -2]
    list_5 = [1, 1, 1, 2]
    list_6 = [10, -10, -10, 10]
    list_7 = [10, -10, 10, -10, 0, 0]
    list_8 = [20, -10, -10, 10]

    for i in [list_1, list_2, list_3, list_4, list_5, list_6, list_7, list_8]:
        print(*func(i))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 09:06:41 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-4-16 09:05 编辑
def f(aList):
    list1 = []
    list2 = []
    b = str(aList)
    b = ''.join(b.split())  # 去除空格
    length = len(b)
    minSub = float('inf')
    for i in range(2,length-1):
        x = b[:i]+']'
        y = '['+b[i:]
        if x[-2] == '-' or y[1] == ',' or y[1] == '0':
            continue
        else:
            x = eval(x)
            y = eval(y)
            sub = abs(sum(x) - sum(y))
            if sub < minSub:
                minSub = sub
                list1, list2 = x, y
    return list1, list2
                
                
list1 = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
print(f(list1))

>>>  ([872, 4345, -729, 0, 9988, 12], [3456, 7171, 44, -3])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 10:04:07 | 显示全部楼层
本帖最后由 晓屁屁 于 2018-4-13 11:50 编辑

数字之和是个数之和还是相加之和?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 13:11:51 | 显示全部楼层
arr=[872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
xmax=sum(arr)
for k in range(len(arr)):    
    s1,s2=sum(arr[:k]),sum(arr[k+1:])    
    x=str(arr[k])
    for i in range(len(x)+1):
        m1,m2=x[:i],x[i:]
        if m1=='-':
            continue
        n1=0 if m1=='' else int(m1)
        n2=0 if m2=='' else int(m2)
        tmp=abs(s1+n1-s2-n2)
        if xmax>=tmp:
            xmax=tmp     
            res1,res2=arr[:k],arr[k+1:]       
            if m1!='':
                res1.append(n1)
            if m2!='':
                res2.insert(0,n2)
print(res1,res2,xmax)

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
moc + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 13:25:45 | 显示全部楼层
本帖最后由 天圆突破 于 2018-4-13 14:30 编辑
import re
from functools import reduce
def num(string):
    return list(map(lambda x: int(x),re.findall('[-\d]+',string)))

def main(lst):
    lst = reduce(lambda x,y:x+'+'+y,map(lambda x:'('+str(x)+')',lst))
    n, alllst= len(lst), list()
    for i in range(1,n):
        lsta,lstb = lst[:i],lst[i:]
        try:
            if lsta[-1] == '+':lsta = lsta[:-1]
            else:lsta,lstb = lsta+')','('+lstb
            a, b, c, d = eval(lsta), eval(lstb), num(lsta), num(lstb)
            e = abs(a - b)
            alllst.append([e, c, d])
        except:pass
    n = min(list(i[0] for i in alllst))
    result = list(filter(lambda x: x[0] == n,alllst))
    print('共有%d种分割,最小值为%d,分割方法如下:'%(len(result),n))
    for each in result:
        print(each[1],each[2])

if __name__ == '__main__':
    lst = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
    main(lst)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 18:40:25 | 显示全部楼层
a=[872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
tt=[]
qq=[]
b=str(a).replace(' ','')
for i in range(len(b)-3):
    b_zuo=b[:(i+2)]+']'
    b_you='['+b[(i+2):]
    if b_zuo[-2]=='-':
        continue
    elif b_you[1]==',':
        continue
    else:
        b_zuo=eval(b_zuo)
        b_you=eval(b_you)
        num=abs(sum(b_zuo)-sum(b_you))
        tt.append(num)
        qq.append([b_zuo,b_you])
xx=tt.index(min(tt))
print(qq[xx][0] ,qq[xx][1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-13 19:29:20 From FishC Mobile | 显示全部楼层
本帖最后由 达锅 于 2018-4-13 23:56 编辑

这么快就公开了??
不理解差值最小,意思是切分后右边的和尽可能比左边大,还是左右两边尽可能接近?
反正就一个绝对值符号的差别,我就按绝对值最小计算了

这是转字符版的
def main(mlist):
    mtxt="".join(map(lambda x: str(x)+"p",mlist))#转换为字符,以p间隔
    def mc(mstr):#把字符重新转化为数字
        return [int(each) for each in mstr.replace("p",",").split(",") if each]#会存在空字符,需要过滤
    temp=((mc(mtxt[:i]),mc(mtxt[i:])) for i in range(1,len(mtxt))  if mtxt[i-1]!="-")#储存每一种可能,过滤负号
    return (min(temp,key=lambda x:abs(sum(x[0])-sum(x[1]))))#返回差值
   
print(main([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]))

这是转字符版第二稿,居然忘记eval函数了~
感谢@lan358088 提醒

def main(mlist):
    mtxt="".join(map(lambda x: str(x)+"+",mlist))[:-1]#转换为字符,以p间隔
    temp=[(mtxt[:i],mtxt[i:]) for i in range(1,len(mtxt)) if mtxt[i-1] not in '-+']
    return min(temp,key=lambda x:abs(eval(x[0])-eval(x[1])))
print(main([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]))

这是直接计算的
def main(mlist):
    mmin=[9999999,0]
    for mnum,mcont in enumerate(mlist):#循环读取列表
        for i in range(1,len(str(abs(mcont)))):#最高支持99位数
            mleft,mright=divmod(abs(mcont),10**i)#整除数为跟左边的列表,余数跟右边
            temp=mlist[:mnum]+[mleft*((abs(mcont)//mcont))],[mright]+mlist[mnum+1:]#中间有一个数的整除是取符号,应该有一个函数的,找不到
            msum=abs(sum(temp[0])-sum(temp[1]))#是不是应该求差值的绝对值最小?在公式前面加一个abs就行了
            mmin=(msum,temp) if msum<mmin[0] else mmin
    return mmin

print(main([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 20:05:52 | 显示全部楼层
还没评分呢,不知道作对没,有什么提高建议。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 21:59:08 | 显示全部楼层
好像都没考虑存在一个最小值多个分割方式的情况啊,例如:
[-631, 998, 509, -551, 546, 946, 37, -8, 40, -883]
[[142, [-631, 998, 509, -5], [51, 546, 946, 37, -8, 40, -883]], [142, [-631, 998, 509, -55], [1, 546, 946, 37, -8, 40, -883]]]

[716, -942, 139, -583, -206, 472, -978, -715, 142, 73]
[[9, [716, -942, 139, -583, -206, 472, -9], [78, -715, 142, 73]], [9, [716, -942, 139, -583, -206, 472, -97], [8, -715, 142, 73]]]

[342, 14, -668, 359, -481, -667, -144, -494, 742, 928]
[[39, [342, 14, -6], [68, 359, -481, -667, -144, -494, 742, 928]], [39, [342, 14, -66], [8, 359, -481, -667, -144, -494, 742, 928]]]

[900, 165, -472, 897, -788, 270, 836, 980, -995, 167]
[[16, [900, 16], [5, -472, 897, -788, 270, 836, 980, -995, 167]], [16, [900, 165, -472, 897, -788, 270], [836, 980, -995, 167]]]

[-655, -814, -296, 470, 275, 58, -173, 873, -847, -560]
[[207, [-655, -814, -296, 470, 275, 58, -173, 8], [73, -847, -560]], [207, [-655, -814, -296, 470, 275, 58, -173, 873, -84], [7, -560]]]

[-675, -10, 68, -772, -879, 877, -630, 622, -3, -550]
[[133, [-675, -10, 68, -7], [72, -879, 877, -630, 622, -3, -550]], [133, [-675, -10, 68, -77], [2, -879, 877, -630, 622, -3, -550]]]

[34, -374, 905, -979, -881, 158, -562, -703, 277, 269]
[[58, [34, -374, 905, -979, -8], [81, 158, -562, -703, 277, 269]], [58, [34, -374, 905, -979, -88], [1, 158, -562, -703, 277, 269]]]

[504, 937, 210, -693, -350, 897, 864, 526, 194, 471]
[[258, [504, 937, 210], [-693, -350, 897, 864, 526, 194, 471]], [258, [504, 937, 210, -693, -350, 897, 8], [64, 526, 194, 471]]]

[602, -696, -592, -995, 899, 821, -362, -46, 533, -665]
[[93, [602, -696, -592, -995, 899, 821, -362, -46, 533, -6], [65]], [93, [602, -696, -592, -995, 899, 821, -362, -46, 533, -66], [5]]]

[-554, -782, 302, -793, 816, -363, -827, 816, 135, 883]
[[246, [-5], [54, -782, 302, -793, 816, -363, -827, 816, 135, 883]], [246, [-55], [4, -782, 302, -793, 816, -363, -827, 816, 135, 883]]]

[20, -502, -441, -464, -393, -127, 31, -700, 438, 793]
[[105, [20, -502, -4], [41, -464, -393, -127, 31, -700, 438, 793]], [105, [20, -502, -44], [1, -464, -393, -127, 31, -700, 438, 793]]]

[-306, 807, -36, -122, -290, -19, -996, -209, -483, 289]
[[332, [-306, 807, -36, -122, -290, -19, -9], [96, -209, -483, 289]], [332, [-306, 807, -36, -122, -290, -19, -99], [6, -209, -483, 289]]]

[997, -722, -222, 453, -72, -614, 219, -436, -148, 946]
[[97, [997, -722, -2], [22, 453, -72, -614, 219, -436, -148, 946]], [97, [997, -722, -22], [2, 453, -72, -614, 219, -436, -148, 946]]]

[-417, 771, -344, -669, -381, -384, 132, 691, 355, -390]
[[88, [-417, 771, -344, -6], [69, -381, -384, 132, 691, 355, -390]], [88, [-417, 771, -344, -66], [9, -381, -384, 132, 691, 355, -390]]]

[-438, 449, -637, -356, 780, 831, -663, 213, -505, -665]
[[115, [-438], [449, -637, -356, 780, 831, -663, 213, -505, -665]], [115, [-438, 449, -637, -356, 78], [0, 831, -663, 213, -505, -665]]]

[147, -754, 537, 742, -983, 0, -881, -237, -848, 569]
[[116, [147, -754, 537, 742, -983, 0, -8], [81, -237, -848, 569]], [116, [147, -754, 537, 742, -983, 0, -88], [1, -237, -848, 569]]]

[536, 32, -723, -324, -884, -874, 337, -670, 972, -549]
[[213, [536, 32, -723, -324, -8], [84, -874, 337, -670, 972, -549]], [213, [536, 32, -723, -324, -88], [4, -874, 337, -670, 972, -549]]]

[272, 654, -848, 715, -742, -830, 271, 220, 376, -449]
[[35, [272, 654, -848, 715, -742, -830, 271, 220, 376, -4], [49]], [35, [272, 654, -848, 715, -742, -830, 271, 220, 376, -44], [9]]]

[-556, -298, 30, -747, -346, 927, 668, -747, 122, 355]
[[25, [-5], [56, -298, 30, -747, -346, 927, 668, -747, 122, 355]], [25, [-55], [6, -298, 30, -747, -346, 927, 668, -747, 122, 355]]]

[342, -128, 159, -359, -280, 743, 724, 326, -849, 172]
[[104, [342, -128, 159], [-359, -280, 743, 724, 326, -849, 172]], [104, [342, -128, 159, -359, -280, 743], [724, 326, -849, 172]]]

[107, -483, -777, 965, -888, -700, -293, -870, 379, 948]
[[1, [107, -483, -7], [77, 965, -888, -700, -293, -870, 379, 948]], [1, [107, -483, -77], [7, 965, -888, -700, -293, -870, 379, 948]]]

[-313, -776, -569, -725, 615, -516, -735, 412, 662, 406]
[[54, [-313, -7], [76, -569, -725, 615, -516, -735, 412, 662, 406]], [54, [-313, -77], [6, -569, -725, 615, -516, -735, 412, 662, 406]]]

[-199, -993, -149, -829, -25, 903, -156, 330, -391, 519]
[[503, [-199, -9], [93, -149, -829, -25, 903, -156, 330, -391, 519]], [503, [-199, -99], [3, -149, -829, -25, 903, -156, 330, -391, 519]]]

[600, -834, -883, -777, -345, -948, -777, 930, 798, -970]
[[111, [600, -834, -883, -7], [77, -345, -948, -777, 930, 798, -970]], [111, [600, -834, -883, -77], [7, -345, -948, -777, 930, 798, -970]]]

[-443, -799, 435, -736, 376, -768, 747, 333, 416, -92]
[[41, [-4], [43, -799, 435, -736, 376, -768, 747, 333, 416, -92]], [41, [-44], [3, -799, 435, -736, 376, -768, 747, 333, 416, -92]]]

[-863, 469, 659, -635, 271, -408, -667, -168, -502, -120]
[[210, [-863, 469, 659, -635, 271, -408, -6], [67, -168, -502, -120]], [210, [-863, 469, 659, -635, 271, -408, -66], [7, -168, -502, -120]]]

[997, 526, -475, -355, -894, -887, -436, -956, 932, 623]
[[459, [997, 526, -475, -355, -894, -8], [87, -436, -956, 932, 623]], [459, [997, 526, -475, -355, -894, -88], [7, -436, -956, 932, 623]]]

[-116, -811, -27, -991, -489, 546, -966, -84, -457, 79]
[[317, [-116, -811, -27, -9], [91, -489, 546, -966, -84, -457, 79]], [317, [-116, -811, -27, -99], [1, -489, 546, -966, -84, -457, 79]]]

[-380, 979, 233, -810, 322, -663, -152, -202, 732, -110]
[[7, [-380, 979, 233, -810, 322, -6], [63, -152, -202, 732, -110]], [7, [-380, 979, 233, -810, 322, -66], [3, -152, -202, 732, -110]]]
这些?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 22:08:12 | 显示全部楼层
本帖最后由 柯基不是天然卷 于 2018-4-13 23:06 编辑

list = [1,122,-1233,-4124,512,-216,714,28,9]
list_a=[]
list_b=[]
answer_a=[]
answer_b=[]
answer1 = []
answer2 = []
last_answer1 = []
last_answer2 = []
def create_hanshu():
    for i in range(len(list)+1):
        list_a.append(list[:i])
        list_b.append(list[i:])
    list_a.pop(0)
    list_b.pop(-1)

def add_list():
    for i in list_a:
        answer1.append(sum(i))
    for i in list_b:
        answer2.append(sum(i))
def main():
    create_hanshu()
    add_list()
    last_answer1 = answer1[0]
    last_answer2 = answer2[0]
    biggest_answer = 0
    for i in range(1,len(answer1)):
        if abs(answer1[i]+answer2[i]) > abs(biggest_answer):
            biggest_answer = abs(answer1[i]+answer2[i])
            last_answer1 = list_a[i]
            last_answer2 = list_b[i]
        print(last_answer1)
        print(last_answer2)

main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 22:09:23 | 显示全部楼层
def split_num1(lstd):
    a = b = c = 0
    l = []
    uu = []
    SUM = sum(lstd)
    count = 0
    
    for i in lstd[1: -1]:
        a += i
        b = SUM - a - a
        c = abs(b)
        l.append(c)

    x = min(l)
    #考虑是否有两个及两个以上分割点
    for i in range(len(l)):
        if l[i] == x:
            count += 1
            uu.append(i)
    if count == 1:
        return lstd[:l.index(x)+2], lstd[l.index(x)+2:]
    else:
        #考虑到有些列表的分割点可能会很多,如[-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1],就不逐一返回了
        print('分割点集合为:', uu)

    
lstd = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
s1 = split_num1(lstd)[0]
s2 = split_num1(lstd)[1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 23:35:36 | 显示全部楼层
天圆突破 发表于 2018-4-13 21:59
好像都没考虑存在一个最小值多个分割方式的情况啊,例如:

这些?

只要能找到最小值,找到最小值一样的也不难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 00:27:35 | 显示全部楼层
def depart(datalist):
    if len(datalist) == 1 and abs(datalist[0]) < 10:
        print("No solution!")
        return
    leftlist = []
    sumleft = 0
    sumright = sum(datalist)
    minDiffer = abs(2 * datalist[0] - sumright)
    minleftlist = [datalist[0]]
    minrightlist = datalist[1:]
    if minDiffer == 0:
        print([datalist[0]], '\n', datalist[1:], '\n', "minDiffer is 0!")
        return
    for k in range(len(datalist[:])):
        num = datalist.pop(0)
        sumright -= num
        if abs(num) >= 10:
            j = 0 if num >= 0 else 1
            for i in range(1 + j, len(str(num))):
                leftnum = int(str(num)[:i])
                sumleft += leftnum
                rightnum = int(str(num)[i:])
                sumright += rightnum
                if abs(sumleft - sumright) == 0:
                    leftlist.append(leftnum)
                    datalist.insert(0, rightnum)
                    print(leftlist, '\n', datalist, '\n', "minDiffer is 0!")
                    return
                elif abs(sumleft - sumright) < minDiffer:
                    minDiffer = abs(sumleft - sumright)
                    minleftlist = leftlist[:]
                    minleftlist.append(leftnum)
                    minrightlist = datalist[:]
                    minrightlist.insert(0, rightnum)
                sumleft -= leftnum
                sumright -= rightnum
            sumleft += num
        else:
            sumleft += num
            if abs(sumleft - sumright) < minDiffer:
                minDiffer = abs(sumleft - sumright)
                minleftlist = leftlist[:] + [num]
                minrightlist = datalist[:]
        leftlist.append(num)
    print(minleftlist, '\n', minrightlist, '\n', "minDiffer is %d" % minDiffer)
    return


if __name__ == "__main__":
    depart([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 14:49:06 | 显示全部楼层

多敲代码才是硬道理,,,,对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 22:19:49 | 显示全部楼层
本帖最后由 凌九霄 于 2018-4-15 16:38 编辑
import random

absresult = 10000
lsta = []
lstb = []
lst = random.sample([x for x in range(-3000, 10000)], 10)
strnum = str(lst).replace('[', '').replace(']', '').replace(' ', '')

for i in range(1, len(strnum)):
    if strnum[i - 1] not in [',', '-']:

        xlst = list(map(int, strnum[0:i].split(',')))
        if strnum[i] != ',':
            ylst = list(map(int, strnum[i:].split(',')))
        else:
            ylst = list(map(int, strnum[i + 1:].split(',')))

        tmp = abs(sum(xlst) - sum(ylst))
        if absresult > tmp:
            absresult = tmp
            lsta = xlst
            lstb = ylst

print('\n原列表:\n{0}\n\n按要求分割后的两个列表为:\n{1}\n{2}\n\n两个列表的和的差的最小绝对值为:{3}'.format(lst, lsta, lstb, absresult))
360截图20180414221845248.jpg 360截图20180414221924389.jpg 360截图20180415163820530.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-15 23:32:23 | 显示全部楼层
本帖最后由 坑得飞起 于 2018-4-15 23:35 编辑

def bijiao(a,b):
    if a=='q' : return b
    if b=='q' : return a
    a2,b2=a,b
    if a<0 : a=-a
    if b<0 : b=-b
    if a<b :
        return a
    return b
ss=input()
an,ans1,ans2,ss='q',[],[],ss[1:len(ss)-1]
for i in range(len(ss)):
    if ss[i]=='-' or ss[i]==',' :
        continue
    s1=ss[:i+1].split(',')
    for j in range(len(s1)):
        s1[j]=int(s1[j])   
    s2=ss[i+1:].split(',')
    if s2[0]=='' :
        s2=s2[1:]
    for j in range(len(s2)):
        s2[j]=int(s2[j])
    if an!=bijiao(an,sum(s1)-sum(s2)):
        an,ans1,ans2=bijiao(an,sum(s1)-sum(s2)),s1,s2
print(an,',',ans1,',',ans2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-20 11:35:59 | 显示全部楼层
最近太忙了,一直没时间做题,今天抽点空,感觉自己写得好麻烦啊!有空了再优化吧……
l1 = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]

tmp = []
for i, each in enumerate(l1):
    if i == 0:
        front = []
        back = l1[1:]
    elif i == len(l1) - 1:
        front = l1[:i]
        back = []
    else:
        front = l1[:i]
        back = l1[i + 1:]

    x1 = str(each)
    if x1[0] != '-':
        for s in range(len(x1)):
            if s != len(x1) - 1:
                sf = front + [int(x1[:s + 1])]
                sb = [int(x1[s + 1:])] + back
            else:
                sf = front + [int(x1)]
                sb = back
            tmp.append([abs(sum(sf) - sum(sb)), sf, sb])
    else:
        for s in range(1, len(x1)):
            if s != len(x1) - 1:
                sf = front + [int(x1[:s + 1])]
                sb = [int(x1[s + 1:])] + back
            else:
                sf = front + [int(x1)]
                sb = back
            tmp.append([abs(sum(sf) - sum(sb)), sf, sb])


m = min([sub[0] for sub in tmp])
for i in tmp:
    if i[0] == m:
        print(i[1], i[2])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 22:26:51 | 显示全部楼层
python每日一题好几个星期没有更新了。大神。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 21:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表