📜  Python|有效范围产品

📅  最后修改于: 2022-05-13 01:54:46.269000             🧑  作者: Mango

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]