在Python中计算两个数字之间的非匹配共享数字

在Python中计算两个数字之间的非匹配共享数字,python,python-3.x,Python,Python 3.x,我试图找出一种方法来确定python中两个数字之间不匹配的公共数字的总数 到目前为止,我可以得到两个数字之间的匹配位数。最终目标是拥有一个函数,该函数接受两个数字,即6621和6662,并返回匹配位数的数字2和不匹配共享位数的数字1 我曾尝试使用嵌套的while循环来实现这一点,但根据所比较的数字,计数并不总是准确的 while i < n:#check 2. Nested while statements j = 0 while j < n: if

我试图找出一种方法来确定python中两个数字之间不匹配的公共数字的总数

到目前为止,我可以得到两个数字之间的匹配位数。最终目标是拥有一个函数,该函数接受两个数字,即6621和6662,并返回匹配位数的数字2和不匹配共享位数的数字1

我曾尝试使用嵌套的while循环来实现这一点,但根据所比较的数字,计数并不总是准确的

while i < n:#check 2. Nested while statements
    j = 0
    while j < n:

        if g_list[i] == p_list[j] and j == i:
            x
        elif g_list[i] == p_list[j]:
            z += 1
        print(g_list[i],p_list[j],z, i, j)
        j += 1

    i += 1
而i
您可以这样做:

a = 6661
b = 6662

def find_difference(first, second):
    first_list = list(str(first))
    second_list = list(str(second))
    c = set(first_list)
    d = set(second_list)
    print((len(c.symmetric_difference(d)),len(c.intersection(d))))
输出:

(2, 1)

您可以计算每个数字中每个数字出现的次数,并取其中的最小值。这将得到常用位数,然后减去匹配位数

def get_count_of_digit(number):
    l = [0 for i in range(10)]
    list_digit = str(number)
    for d in list_digit:
        l[int(d)] += 1
    return l 

def number_of_common_digit(number1, number2):
    l1, l2 = [get_count_of_digit(n) for n in (number1, number2)]
    return sum([min(l1[i], l2[i]) for i in range(10)])

我可能应该包括这个lol。我试过像这样使用递归,而我66621
6662
的预期输出是什么?我还应该澄清一下,数字的长度总是相同的。在您的示例中,6不也是匹配的数字吗?对于我试图解决的问题,6661和6662的值的期望输出为3,0。3是匹配的6,0是不匹配的值。上面的解决方案为a=6621和b=6298的值返回3,其中所需的输出为1。@doesitmatter啊,错过了问题的这一部分。我会修改我的答案shortly@doesitmatter这与您最初的要求不同。
最终目标是拥有一个函数,该函数接受两个数字,即6621和6662,并返回数字2表示匹配的位数,返回1表示不匹配的共享位数。
-6和2表示匹配的位数,返回1表示不匹配的位数一个。我将编辑我的答案以返回(2,0)