Python| N个连续的奇数或偶数
本文关注的问题非常具体,在不同领域可能不太有用。但是,这将解决的方式可能会为解决潜在的类似问题打开大门,因此值得一读。本文解决了测试列表是否包含一系列奇数或偶数元素的问题。让我们讨论一些可以解决这个问题的方法。
方法 #1:使用sum()
+ 列表理解 + zip() + any()
使用上述功能的组合可以解决此问题。该方法分两步解决问题。在第一步中,我们使用列表理解和 zip函数计算所有可能的 N 对,在第二步中,我们使用 sum 和任何函数来测试 N 可分结果,如果我们找到其中任何一个,我们返回正数。
# Python3 code to demonstrate
# N consecutive Odd or Even Numbers
# using sum() + zip() + any() + list comprehension
# initializing list
test_list = [1, 5, 6, 4, 8]
# printing original list
print("The original list : " + str(test_list))
# initializing N
N = 3
# using sum() + zip() + any() + list comprehension
# N consecutive Odd or Even Numbers
temp = ( test_list[i : i + N] for i in range(len(test_list) - N + 1) )
res = any( sum(ele % 2 for ele in temps) % N == 0 for temps in temp )
# print result
print("Does list contain the desired consecution : " + str(res))
输出 :
The original list : [1, 5, 6, 4, 8]
Does list contain the desired consecution : True
方法 #2:使用groupby() + any()
在上述方法中执行第一步的整个逻辑可以使用我们执行分组的 groupby函数来管理,以后可以使用任何函数来检查连续性。
# Python3 code to demonstrate
# N consecutive Odd or Even Numbers
# using groupby() + any()
from itertools import groupby
# initializing list
test_list = [1, 5, 6, 4, 8]
# printing original list
print("The original list : " + str(test_list))
# initializing N
N = 3
# using groupby() + any()
# N consecutive Odd or Even Numbers
res = any(len(list(sub)) == N for idx, sub in
groupby([sub % 2 for sub in test_list]))
# print result
print("Does list contain the desired consecution : " + str(res))
输出 :
The original list : [1, 5, 6, 4, 8]
Does list contain the desired consecution : True