检查交替奇偶校验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查交替奇偶校验相关的知识,希望对你有一定的参考价值。
我正在努力找到一种方法来检查我的列表中的每个其他数字是否是交替奇偶校验(即偶数,奇数,偶数,奇数等)
[1,2,3,4] # odd, even, odd, even (True, because they alternate)
[1,3,2,4] # odd, odd, even, even (False, because they don't alternate)
任何人都知道如何检查这个?
答案
这里
def alter(ls):
for i in range(len(ls)-1):
if ls[i]%2 == ls[i+1]%2:
return False
return True
另一答案
您可以在输入列表中的相邻值上使用Python模数运算符%
,并在迭代时检查相等性。
如果您选择此路线并且效率是一个问题,我建议您使用第三方库,如NumPy / numba,因此迭代不会在Python级别进行:
from numba import jit
@jit(nopython=True)
def check_alt_parity(L):
for i in range(len(L)-1):
if L[i] % 2 == L[i+1] % 2:
return False
return True
def check_alt_parity_list(L):
for i in range(len(L)-1):
if L[i] % 2 == L[i+1] % 2:
return False
return True
A = [1, 2, 3, 4] * 10000
B = [1, 3, 2, 4] * 10000
%timeit check_alt_parity(A) # 780 µs
%timeit check_alt_parity_list(A) # 9.09 ms
另一答案
您可以遍历序列的所有索引,然后将其与下一个索引进行比较:
def is_alternating_parity(seq):
for i in range(len(seq) - 1):
if seq[i] % 2 == seq[i + 1] % 2:
return False
return True
print(is_alternating_parity([1, 2, 3, 4])) # True
print(is_alternating_parity([1, 3, 2, 4])) # False
另一答案
尝试这个函数,l
用于列表理解并获得奇数或偶数的bool
,然后检查是否所有都为真(每秒的偶数索引元素都是True或全部为False,并且与每个奇数索引元素相同:
def oddeven_alter(l):
l=[i%2 for i in l]
return all([any([all(l[::2]),all(not i for i in l[::2])]),any([all(l[1::2]),all(not i for i in l[1::2])])])
)
print(oddeven_alter([1,2,3,4]))
print(oddeven_alter([1,3,2,4]))
输出:
True
False
一种复杂的外观
以上是关于检查交替奇偶校验的主要内容,如果未能解决你的问题,请参考以下文章