Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表中的列表中的本地最大值_Python_Algorithm_List_Nested Lists_Minimum - Fatal编程技术网

Python 列表中的列表中的本地最大值

Python 列表中的列表中的本地最大值,python,algorithm,list,nested-lists,minimum,Python,Algorithm,List,Nested Lists,Minimum,我有一个优化问题,就是尝试使用较少种类的产品 例如: 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, ch

我有一个优化问题,就是尝试使用较少种类的产品

例如:

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,最大值为39,依此类推。但我不知道怎么做。有没有办法找到所有嵌套列表的局部最大值?我被困在这一刻,你能帮我吗?我也希望得到进一步进展方面的帮助

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


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

您有一个列表列表,因此只需在列表上迭代,然后获取子列表中每个子列表的最大值

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]]

在编辑这篇文章使其可读之后,我现在已经阅读了它,并且…你真正的问题是什么?您已经为第一步编写了一些代码。你知道第二步要写什么,但你还没有写。你知道在那之后你想做什么,但你还没有做到。所以…一切听起来都很棒。我陷入了寻找局部最大值的时刻。我不知道如何访问嵌套列表中的值。我也不知道如何写进一步的部分,但也许在这一步之后会更流畅。你能帮我找到这个嵌套循环中的局部最大值吗?要访问列表中的值,你可以对它们进行迭代(
for value in lst:
)或索引(
lst[2]
),对吗?因此,要访问嵌套列表中的值,您可以迭代(
对于lst中的sublst:
对于sublst中的值:
)或索引(
lst[2][4]
),内部列表与外部列表的方式完全相同。我觉得我对您的另一个问题的回答正好给出了您想要的内容。你能再看一眼吗?非常感谢,我会把你的答案记为一个好答案,但作为一个新用户,我需要提高我的声誉。一旦我得到它,我会记下你的答案。