首页 > 解决方案 > 如何确定列表是否包含彼此相邻的 3 个偶数或 3 个奇数?

问题描述

您如何确定一个列表是否包含 3 个相邻的偶数或 3 个奇数?

示例列表(真、假、真):

[2, 1, 3, 5]
[2, 1, 2, 5]
[2, 4, 2, 5]

最近的代码:

evenOdd = []

while True: 
    try:
        n = int(input())
        evenOdd.append(n)
    except:
        break

for x in evenOdd:
   if x % 2 == 0:
       print("True")

标签: pythonpython-3.xlist

解决方案


这是一些代码。这被认为比迭代索引更“pythonic” - 这使用zip函数迭代连续三元组。如果列表少于三个项目,这将给出错误 - 您可以添加该错误检查。当其中一个可迭代对象的值用完时,该zip函数停止,这正是我们在这里想要的。

def three_evens_or_odds(alist):
    for a, b, c in zip(alist, alist[1:], alist[2:]):
        if (((a & 1) and (b & 1) and (c & 1)) or
            ((a & 1 == 0) and (b & 1 == 0) and (c & 1 == 0))):
            return True
    return False

print(three_evens_or_odds([2, 1, 3, 5]))
print(three_evens_or_odds([2, 1, 2, 5]))
print(three_evens_or_odds([2, 4, 2, 5]))

或者,甚至更短(从@jdehesa 借用一个我应该自己想到的想法,所以像我一样支持他的回答),

def three_evens_or_odds(alist):
    for a, b, c in zip(alist, alist[1:], alist[2:]):
        if a & 1 == b & 1 == c & 1:
            return True
    return False

print(three_evens_or_odds([2, 1, 3, 5]))
print(three_evens_or_odds([2, 1, 2, 5]))
print(three_evens_or_odds([2, 4, 2, 5]))

打印输出是

True
False
True

推荐阅读