Python - 最大长度连续正元素
有时,在使用Python列表时,我们可能会遇到一个问题,即我们监控一个序列,并且我们需要找出仅出现正元素时的最大长度。这类问题可以在数据域中应用。让我们讨论可以执行此任务的某些方式。
Input : test_list = [4, 5, 4, 1, 7, 2, 5, 6, -2, -9, -10]
Output : 8
Input : test_list = [4, -5, -4, -1, -7, 2, 5, -6, -2, -9, -10]
Output : 2
方法#1:使用循环
这是我们执行此任务的方式之一。以这种蛮力的方式,我们迭代所有元素并不断更新最大值,只要正元素链被破坏。
# Python3 code to demonstrate working of
# Maximum length consecutive positive elements
# Using loop
# initializing list
test_list = [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
# printing original list
print("The original list : " + str(test_list))
# Maximum length consecutive positive elements
# Using loop
counter = 0
max_score = 1
for ele in test_list:
if ele > 0:
counter += 1
else:
if(counter > 0):
max_score = max(max_score, counter)
counter = 0
if(counter > 0):
max_score = max(max_score, counter)
# printing result
print("Maximum elements run length : " + str(max_score))
输出 :
The original list : [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
Maximum elements run length : 3
方法 #2:使用groupby() + defaultDict() + max()
上述功能的组合可以用来解决这个问题。在此,我们使用 groupby() 执行分组任务,我们可以通过针对不同的键对它们进行分组来执行查找负最大值和正最大值运行的最大值的任务,并使用 max() 在末尾找到列表的最大值。
# Python3 code to demonstrate working of
# Maximum length consecutive positive elements
# Using groupby() + defaultDict() + max()
from collections import defaultdict
from itertools import groupby
# initializing list
test_list = [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
# printing original list
print("The original list : " + str(test_list))
# Maximum length consecutive positive elements
# Using groupby() + defaultDict() + max()
counter = defaultdict(list)
for key, val in groupby(test_list, lambda ele: "plus" if ele >= 0 else "minus"):
counter[key].append(len(list(val)))
res = []
for key in ('plus', 'minus'):
res.append(counter[key])
# printing result
print("Maximum elements run length : " + str(max(res[0])))
print("Maximum negative elements run length : " + str(max(res[1])))
输出 :
The original list : [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
Maximum elements run length : 3
Maximum negative elements run length : 3