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)
这是一些代码.这被认为比迭代索引更"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)
你可以使用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)
这可以很容易地调整任何组大小.