我有两个数字1100
和1010
,然后我想找出其中两个不同的对应数字的数目,因此上述示例的答案是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(超过时间限制)。
注意:所有数字将严格为0
和1
答案 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
是您的二进制表示形式的硬编码形式。 a
和b
是您的电话号码。
编辑:当True的值为1且False的值为0时,此sum
用作true值的计数。