geekdoc-python-zh/docs/askpython/missing-and-repeating-eleme...

3.0 KiB
Raw Permalink Blame History

在 Python 中查找缺失和重复的元素[简单的一步一步]

原文:https://www.askpython.com/python/examples/missing-and-repeating-elements

嘿伙计们!因此,在本教程中,我们将理解这个简单的问题,即在一系列数字中寻找缺失和重复的元素。让我们通过一个例子来理解这个问题,考虑下面给出的 n = 6 的数字列表。

| one | Two | four | five | five | six |

缺失的数字是 123…中不存在的数字。n重复的数字是在元素中出现两次的数字。

在上面提到的例子中,缺失的数字将是 3重复的数字将是 5。实际结果应该是这样的:1 2 3 4 5 6 没有重复和遗漏的数字。

也读作: Python 列表 vs 数组


手动查找缺失和重复的元素

现在,手动方法是遍历列表一次,并检查每个数字的计数。

如果任何数字的计数等于 2*n那么我们找到重复的数字然后遍历元素检查每个数字的出现:1、2、3 等等。

如果这些数字中的任何一个都不存在,那么将该数字作为缺失的数字返回。

这种方法的问题是这种方法很慢,对于一个简单的问题引入了太多的步骤,并且可以用一种更好的方式来完成。


寻找缺失和重复元素的更好方法

因此,我们将创建一个额外的数组,它将考虑一个元素是否被访问。数组的大小与 n 的值相同。

最初,所有的值都等于 0(不可见),当一个元素出现在数组中时,它在最终数组中的值被设置为 1(可见)。

这一直持续到数组的末尾。我们必须计算两件事:重复的数字和缺失的数字。

如果在任何时候,其值被设置的数字已经被设置,那么这意味着该数字是重复的数字。

现在,为了计算丢失的数字,我们将最后一次遍历最终数组,并检查最终数组中哪个数字的值仍然是 0。这意味着这个数字从未出现过因此它是数组中缺失的数字。

我们将以包含两个值的列表的形式返回这两个值:第一个是重复的数字,第二个是缺失的数字。


用 python 实现

我希望你清楚这一点。现在让我们看一下查找缺失和重复元素的代码实现,以及代码的示例输出。

def find_miss_repeat(arr,n):
    final_array = [0 for i in range(n)]
    l = [0,0]
    for i in arr:
        if(final_array[i-1]==1):
            l[0] = i
        else:
            final_array[i-1] = 1
    for i in range(len(final_array)):
        if(final_array[i]==0):
            l[1] = i+1
    return l

x = find_miss_repeat([1,2,4,5,5,6],6)
print("Repeating Number: ",x[0])
print("Missing Number: ",x[1])

代码的输出如下所示。

Repeating Number:  5
Missing Number:  3


结论

我希望你清楚这个概念。你可以用简单和快速的方法自己尝试一下。同样的逻辑也适用于所有的编程语言。

感谢您阅读教程!编码快乐!😇