如何比较两个数字以找到对应的不同数字的数目

时间:2019-06-29 09:59:51

标签: python algorithm binary numbers

我有两个数字11001010,然后我想找出其中两个不同的对应数字的数目,因此上述示例的答案是2,因为第二个数字和第三位数字都不同。

我正在使用该程序

def req_fun(arr, b): # arr :['1100', '0011', '0101', '1110'], b:'1010'
    count = 0
    for i in arr:
        for j in range(len(b)):
            count += int(i[j])^int(b[j])
    return count

我需要一种更好的方法来实现此目标,因为使用这种方法获得了TLE(超过时间限制)。

注意:所有数字将严格为01

4 个答案:

答案 0 :(得分:1)

您可以在具有sum的生成器上使用zip()的纯Python方式:

a, b = 1100, 1010

print(sum(x != y for x, y in zip(str(a), str(b))))
# 2

答案 1 :(得分:1)

我不清楚是否要返回列表arr中每个项目的不同数字总数或不同数字位数。因此,我假设您要返回不同数字的总数。

如果将两个数字相加(代数和),则当且仅当两个数字不同时,两个对应数字的和为1,并且该事实可用于计算不同数字的数量,如图所示下面

def count_different(arr, b):
    diff_digits = 0
    for i in arr:
        diff_digits += str(int(i)+int(b)).count('1')
    return diff_digits

如果您要为arr中的每个项目返回不同数字的数字,它们会在列表中附加每个计数并返回一个列表。

def count_different(arr, b):
    diff_digits = 0
    l = []
    for i in arr:
        diff_digits += str(int(i)+int(b)).count('1')
        l.append(diff_digits)
    return l

答案 2 :(得分:0)

您需要的是两个字符串中的the Hamming distance,即两个字符串之间的差异(长度相等)。

幸运的是,还有一个Python code on Wikipedia,因此您只需抓住并使用它即可。

代码是:

def hamming_distance(s1, s2):
    """Return the Hamming distance between equal-length sequences"""
    if len(s1) != len(s2):
        raise ValueError("Undefined for sequences of unequal length")
    return sum(el1 != el2 for el1, el2 in zip(s1, s2))

答案 3 :(得分:0)

sum(a & 2**c != b & 2**c for c in range(4))

4是您的二进制表示形式的硬编码形式。 ab是您的电话号码。

编辑:当True的值为1且False的值为0时,此sum用作true值的计数。