sr1*_*sr1 4 python reduce list python-2.7 python-3.x
我已经完成了这两件事。
在给定范围内找到列表的所有可能的子列表(i ,j)。
A = [ 44, 55, 66, 77, 88, 99, 11, 22, 33 ]
Let, i = 2 and j = 4
Run Code Online (Sandbox Code Playgroud)
然后,"A"给定范围内列表的可能子列表(2,4)为:
[66], [66,77], [66,77,88], [77], [77,88], [88]
Run Code Online (Sandbox Code Playgroud)并且,将子
列表的所有元素相乘后的结果乘积的最小值:因此,将上述子列表中的所有元素相乘后的结果列表将变为
X = [66, 5082, 447216, 77, 6776, 88]`
Run Code Online (Sandbox Code Playgroud)
现在,以上列表的最小值,min(X)即66
我的代码:
i, j = 2, 4
A = [ 44, 55, 66, 77, 88, 99, 11, 22, 33 ]
O, P = i, i
mini = A[O]
while O <= j and P <= j:
if O == P:
mini = min(mini, reduce(lambda x, y: x * y, [A[O]]))
else:
mini = min(mini, reduce(lambda x, y: x * y, A[O:P + 1]))
P += 1
if P > j:
O += 1
P = O
print(mini)
Run Code Online (Sandbox Code Playgroud)
我的问题:
对于较大的列表和较大的范围,此代码花费更多的时间来执行!
有没有可能减少上述代码时间复杂度的“ Pythonic”方式?
提前致谢 !
编辑:
得到它了。但是,如果有多个相同的最小产品可能的子列表,
(i,j) A = [2, 22, 10, 12, 2]如果
考虑此列表(i,j) = (0,4)。
有领带。Min product = 2有两种可能性'(0,0)' and '(4,4)'。
两个子列表范围= 0 [ (0-0) and (4-4) ]
在这种情况下,我需要print (minproduct, [sublist-range])= 2, [0,0]
使用字典尝试过,它适用于某些输入,但不适用于所有输入!如何做到这一点?
谢谢 !
首先,给定列表和索引范围,我们可以获得子列表 A[i : j + 1]
[66, 77, 88]
Run Code Online (Sandbox Code Playgroud)
对于正整数a和b,a * b不得小于a或b。因此,您不需要进行乘法运算,两个或多个元素的乘法运算结果不可能较小。这个列表的最小是所有的相乘结果的最小值。
所以结果是:
min(A[i : j + 1])
Run Code Online (Sandbox Code Playgroud)