代码之家  ›  专栏  ›  技术社区  ›  djennacs

检查交替奇偶校验

  •  -2
  • djennacs  · 技术社区  · 6 年前

    [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)
    

    有人知道我怎么查这个吗?

    4 回复  |  直到 6 年前
        1
  •  1
  •   blueheart    6 年前

    在这里

    def alter(ls):
      for i in range(len(ls)-1):
          if ls[i]%2 == ls[i+1]%2:
             return False
      return True
    
        2
  •  2
  •   jpp    6 年前

    可以使用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
    
        3
  •  1
  •   zwer    6 年前

    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
    
        4
  •  1
  •   U13-Forward    6 年前

    l 列表理解和获取 bool 对于奇数或偶数,则检查是否全部为真(每秒偶数索引元素全部为真或全部为假,并且与每个奇数索引元素相同:

    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
    

    看起来有点复杂