📜  Python - 找到最小的非零组

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

Python - 找到最小的非零组

很多时候,我们需要得到的不是整个列表的最小值,而是它的一部分,并且定期进行。这些间隔有时是在遍历之前静态确定的,但有时,约束更加动态,因此我们需要以更复杂的方式处理它。这里讨论的标准是非零组的最小值。让我们讨论一下可以完成此任务的某些方法。

方法#1:使用循环
可以使用循环的蛮力方式执行此任务。我们只是遍历列表中的每个元素来测试它的后续元素是否为非零值,并在我们找到下一个值为零并将其附加到结果列表中时执行最小值。

# Python3 code to demonstrate
# Natural Numbers Minimum
# 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
# Natural Numbers Minimum
res = []
val = 99999
for ele in test_list:
    if ele == 0:
        if val != 99999:
            res.append(val)
            val = 99999
    else:
        val = min(val, ele)
  
# print result
print("The non-zero group Minimum of list is : " + str(res))
输出 :
The original list : [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
The non-zero group Minimum of list is : [4, 3, 4]

方法#2:使用itertools.groupby() + min()
这个特定的任务也可以使用 groupby函数对所有非零值进行分组,min函数可以用来执行它们的最小值。

# Python3 code to demonstrate
# Natural Numbers Minimum
# Using itertools.groupby() + min()
from itertools import groupby
  
# 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() + min()
# Natural Numbers Minimum
res = [min(val) for keys, val in groupby(test_list, key = lambda x: x != 0) if keys != 0]
  
# print result
print("The non-zero group minimum of list is : " + str(res))
输出 :
The original list : [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
The non-zero group Minimum of list is : [4, 3, 4]