问题描述
假设我有 2 个相同数字的数字 A 和 B(都具有不同的数字),我需要找到 X(A 和 B 中的数字数量,并且在相同的位置)和 Y(数字的数量) A 和 B 中的数字,但位置不同)。 例如,如果 A = 4567 和 B = 4567,X 将是 4,Y 将是 0。如果 A = 3456 和 B = 4567,X 将是 0,Y 将是 3。不考虑效率,我的代码是如下:
def compare(num1,num2):
x = 0
y = 0
for i in range(4):
if str(num1)[i] in str(num2) and str(num1)[i] == str(num2)[i]:
x += 1
elif str(num1)[i] in str(num2):
y += 1
return ('X = %d,Y = %d'%(x,y))
但是,我认为这不是解决此问题的最有效方法。谁能提供更有效的解决方案?谢谢...
解决方法
我认为只有一种方法可以在保持整洁的同时缩短它。
for i in range(4):
if str(num1)[i] == str(num2)[i]:
x += 1
elif str(num1)[i] in str(num2):
y += 1
编辑在第 2 行,在 for 循环中。你写了if str(num1)[i] in str(num2) and str(num1)[i] == str(num2)[i]:
。不需要 str(num1)[i] in str(num2)
,因为如果 num1[i] 等于 num2[i],那么这意味着 num1[i] 已经在 num2 中,所以它是一行无用的代码。
如果你只是想缩短线条,你可以试试这个:
for i in range(4):
if str(num1)[i] == str(num2)[i]: x += 1
elif str(num1)[i] in str(num2): y += 1
和
x = y = 0
,
使用 dict
可以减少比较次数。
str(num1)[i] in str(num2):
再次扫描整个字符串。你可以避免这种情况。
def compare(num1,num2):
x = 0
y = 0
result = {}
num1 = str(num1)
num2 = str(num2)
for i in range(0,len(num1)):
result[num1[i]] = i
for i in range(0,len(num2)):
if num2[i] in result:
if result[num2[i]] == i:
x +=1;
else:
y +=1;
return ('X = %d,Y = %d'%(x,y))
print(compare(4567,4567))
print(compare(3456,4567))