lis中列表的本地最大值

2024-04-25 06:03:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个优化问题,试图使用较少种类的产品。你知道吗

例如:

screws = [6,8,16,18,39]

我想把那5颗螺丝换成3颗。所以我需要使用最强的,这样我就可以选择,[8,18,39]。使用任何其他选项都会造成浪费,例如,螺钉16对于位置6来说太强,因此[16,18,39]没有那么好。我想写一个算法,这将是一个更大的部分也有用。到目前为止我试过这个:

def split_list(data, n):
    from itertools import combinations, chain
    for splits in combinations(range(1, len(data)), n-1):
        result = []
        prev = None
        for split in chain(splits, [None]):
            result.append(data[prev:split])
            prev = split
        yield result
new_list = list(split_list(screws, 3))       
#print list(split_list(screws, 3))

运行此代码后,我得到了一个列表:

[[[6], [8], [16, 18, 39]], 
 [[6], [8, 16], [18, 39]], 
 [[6], [8, 16, 18], [39]], 
 [[6, 8], [16], [18, 39]], 
 [[6, 8], [16, 18], [39]], 
 [[6, 8, 16], [18], [39]]]

我想从所有列表中找出本地最大值。例如,在第一个列表中[[6], [8],[16, 18, 39]],maximum=6,maximum=8,maximum=39,依此类推。但我不知道该怎么做。有没有办法找到所有嵌套列表的局部最大值?我被困在这一刻,你能帮我吗?我也希望能帮助取得进一步进展。你知道吗

稍后,我将检查maximum和同一列表中其他元素之间的差异总和。所以,6-6=0,8-8=0,最后39-16+30-18-39-39=35。这将允许我从所有列表中找出最小值。这将是最理想的解决方案。所以最后的结果应该是[[6, 8], [16, 18], [39]],我会从中选择[8,18,39]。你知道吗

这基本上是我的第一个程序后,教程和在线课程,所以所有的帮助是非常欢迎的。你知道吗


Tags: innonechain列表fordataresultlist
1条回答
网友
1楼 · 发布于 2024-04-25 06:03:59

您有一个列表列表,所以只需迭代列表,然后获得子列表中每个子列表的最大值。你知道吗

l = [[[6], [8], [16, 18, 39]],
 [[6], [8, 16], [18, 39]],
 [[6], [8, 16, 18], [39]],
 [[6, 8], [16], [18, 39]],
 [[6, 8], [16, 18], [39]],
 [[6, 8, 16], [18], [39]]]
for sub in l: # each sublist in l -> [[6], [8], [16, 18, 39]]etc..
    print([max(ele) for ele in sub]) # each sublist inside each sublist -> [6], [8], [16, 18, 39]

[6, 8, 39]
[6, 16, 39]
[6, 18, 39]
[8, 16, 39]
[8, 18, 39]
[16, 18, 39]

因此,在代码中只需执行以下操作:

for sub in split_list(screws, 3):
    print([max(ele) for ele in sub])

要获得最大值减去每个元素,您将有许多嵌套循环:

l = [[[6], [8], [16, 18, 39]],
 [[6], [8, 16], [18, 39]],
 [[6], [8, 16, 18], [39]],
 [[6, 8], [16], [18, 39]],
 [[6, 8], [16, 18], [39]],
 [[6, 8, 16], [18], [39]]]

result = []
for sub in l:
    for sub_ele in sub:
        mx = max(sub_ele)
        result.append([mx]+map(lambda x: mx-x,sub_ele))


[[6, 0], [8, 0], [39, 23, 21, 0], [6, 0], [16, 8, 0], [39, 21, 0], [6, 0], [18, 10, 2, 0], [39, 0], [8, 2, 0], [16, 0], [39, 21, 0], [8, 2, 0], [18, 2, 0], [39, 0], [16, 10, 8, 0], [18, 0], [39, 0]]

相关问题 更多 >