如何确定列表是否包含3个偶数或3个奇数值?

Lar*_*ara 4 python list python-3.x

如何确定列表是否包含3个偶数或3个奇数值彼此相邻?

示例列表(True,False,True):

[2, 1, 3, 5]
[2, 1, 2, 5]
[2, 4, 2, 5]
Run Code Online (Sandbox Code Playgroud)

最近的代码:

evenOdd = []

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

for x in evenOdd:
   if x % 2 == 0:
       print("True")
Run Code Online (Sandbox Code Playgroud)

Ror*_*ton 5

这是一些代码.这被认为比迭代索引更"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]))
Run Code Online (Sandbox Code Playgroud)

或者,甚至更短(从我自己应该想到的@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]))
Run Code Online (Sandbox Code Playgroud)

打印出来的是

True
False
True
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 5

你可以使用itertools.groupby():

from itertools import groupby

def check_list(lst):
    for k, g in groupby(lst, key=lambda x: x % 2):
        if len(list(g)) == 3:
            return True
    return False    

print(check_list([2, 1, 3, 5]))  # True
print(check_list([2, 1, 2, 5]))  # False
print(check_list([2, 4, 2, 5]))  # True
Run Code Online (Sandbox Code Playgroud)

这可以很容易地调整任何组大小.