如何实现高效的 Python 算法来查找匹配的数字?

问题描述

假设我有 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))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...