我有一个类似的列表[3,10,4,3,9,15,6,13]
,我想找到两个不重叠的序列/序列,并通过取最大-最小的值来获得最大的值。它们必须是顺序的,因此您不能从1中减去项目3。但是,您可以从3中减去索引1。
因此,在我的示例中,您将获得对[3,10]和[3,15]。您如何以编程方式执行此操作。这是我到目前为止所得到的。
Python:
l = [3,10,4,3,9,15,6,13]
pair1=[max(l), min(l)]
l.remove(max(l))
l.remove(min(l))
pair2=[max(l), min(l)]
哪一个当然不能满足我的要求,但是我不确定如何找到两对。找到上面的代码对可以正常工作,但不能找到两个,因为您通常会得到重叠的序列。
写这个很有趣:
import itertools as it
l = [3,10,4,3,9,15,6,13]
r=sorted(
map(lambda x: (x[0:2], x[2:4]),
sorted(it.imap(
lambda x: (min(x[0:2]), max(x[0:2]), min(x[2:4]), max(x[2:4])),
it.imap(lambda x: (l[x[0]], l[x[1]], l[x[2]], l[x[3]]),
it.combinations(range(len(l)), 4))),
key=lambda x: -(x[1]-x[0]+x[3]-x[2])))[0],
key=lambda x: x[0]-x[1])
print(r)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句