def filter_bin(length, index_pairs):
    """
    用于某些二进制标志位的场景
    index_pairs: {index: value,}
    返回 length 长度内第 index 位值为 value 的所有可能的 int 的 list, index 从 1 开始, e.g.
    >>> filter_bin(3, {1: 1})
    [1, 3, 5, 7]
    >>> filter_bin(3, {1: 1, 2: 0})
    [1, 5]
    >>> filter_bin(3, {1: 0, 2: 1})
    [2, 6]
    """
    ret = []
    for number in range(int('1' * length, 2) + 1):
        match = True
        for index in index_pairs:
            if len(bin(number)) - index >= 2:  # 位数够
                if int(bin(number)[-index]) ^ index_pairs[index]:
                    match = False
            else:  # 位数不够
                if index_pairs[index]:
                    match = False
        if match:
            ret.append(number)
    return ret