检查交替奇偶校验

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

一种复杂的外观

以上是关于检查交替奇偶校验的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何理由使用 (nr & 1 == 0) 而不是 (nr % 2 == 0) 来检查奇偶校验?

Java两个线程实现交替运行-以交替打印奇偶数为例

CPU上奇偶校验标志的用途是啥?

DESKey 是不是保留无效的奇偶校验位?

奇偶校验区别---数据校验器

奇偶校验码与循环冗余校验码CRC