Python|有效范围产品
很多时候,我们需要获取的不是整个列表的结果,而是其中的一部分,并且定期进行。这些间隔有时是在遍历之前静态决定的,但有时,约束更加动态,因此我们需要以更复杂的方式处理它。这里讨论的标准是非零组的乘积。让我们讨论一下可以完成此任务的某些方法。
方法#1:使用循环
可以使用循环的蛮力方式执行此任务。我们只是遍历列表中的每个元素来测试它的后续元素是否为非零值,并在我们找到下一个值为零并将其附加到结果列表中时执行乘积。
# Python3 code to demonstrate
# Valid Ranges Product
# Using loops
# initializing list
test_list = [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
# printing original list
print("The original list : " + str(test_list))
# using loops
# Valid Ranges Product
res = []
val = 1
for ele in test_list:
if ele == 0:
if val != 1:
res.append(val)
val = 1
else:
val *= ele
# print result
print("The non-zero group product of list is : " + str(res))
输出 :
The original list : [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
The non-zero group product of list is : [36, 60, 4]
方法#2:使用itertools.groupby()
+ 循环
此特定任务也可以使用 groupby函数对所有非零值进行分组,并且可以使用循环执行产品。
# Python3 code to demonstrate
# Valid Ranges Product
# Using itertools.groupby() + loop
from itertools import groupby
# getting Product
def prod(val) :
res = 1
for ele in val:
res *= ele
return res
# initializing list
test_list = [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
# printing original list
print("The original list : " + str(test_list))
# using itertools.groupby() + loop
# Valid Ranges Product
res = [prod(val) for keys, val in groupby(test_list, key = lambda x: x != 0) if keys != 0]
# print result
print("The non-zero group product of list is : " + str(res))
输出 :
The original list : [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
The non-zero group product of list is : [36, 60, 4]