【问题标题】:Pythonic way to do logic operations on binary numbers with n number of inputsPythonic 方法对具有 n 个输入的二进制数进行逻辑运算
【发布时间】:2021-12-31 04:01:36
【问题描述】:

我正在用 python 编写一个数字逻辑程序,并且对一种对二进制数进行逻辑运算的最佳实践方法感兴趣。理想情况下,我想比较来自任意数量输入的位,例如 - [1011, 0101, 1001] 等 - 并计算结果。

以下是对几个 8 位字进行 AND 的一些尝试。仅在第二次尝试中,我是否能够比较两个以上的二进制数,但这种方法对我来说看起来很糟糕。我真的不在乎二进制数最初是表示为字符串还是整数(在此处的每次尝试中,无论如何我都需要进行一些转换为另一种类型)。如前所述,我想找到一种 Python 的方式来做到这一点。

无论如何,这是我笨拙的第一次尝试...... ;)

# Attempt 1 - compute result for each bit/element in string, and create a new string

# inputs
a = '10100001'
b = '10101101'

bits = 8

result = ''
for i in range(bits):
    new_bit = int(a[i]) & int(b[i])
    result = result[:i] + str(new_bit) + result[i:]

print result



# Attempt 2  - for each bit in each input, check if 0 or 1.. if 0, the new_bit is 0, otherwise, the new_bit = 0

inputs = ['11000001', '11001011', '11101101']

bits = 8

result = ''
for i in range(bits):
    new_bit = '1'
    for iput in inputs:
        if iput[i] == '0':
             new_bit = '0'
     
    result = result[:i] + str(new_bit) + result[i:]

print result



# Attempt 3 - 

bits = 8

# inputs
a = int('00001001', 2)   
b = int('00001101', 2)  

result = bin(a & b).split('0b', 1)[1].zfill(8) 

print result

简而言之,我倾向于进行第三次尝试,但不太确定如何处理多于两个输入的情况。

任何建议将不胜感激,谢谢。

【问题讨论】:

    标签: python logic


    【解决方案1】:

    使用reduce() 对列表的所有元素执行重复操作。

    from functools import reduce
    
    inputs = ['11000001', '11001011', '11101101']
    inputs = [int(i, 2) for i in inputs] # Convert from binary string to number
    
    result = reduce(lambda x, y: x & y, inputs) # combine them with AND
    print(f"{result:08b}") # print result as 8-bit binary with leading zeroes
    

    【讨论】:

    • 你的答案很好。
    • 这看起来很有效,确实非常好。谢谢巴尔玛 :)
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2014-03-15
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多