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

85 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 在 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 数组](https://www.askpython.com/python/difference-between-python-list-vs-array)***
* * *
## 手动查找缺失和重复的元素
现在,手动方法是遍历列表一次,并检查每个数字的计数。
如果任何数字的计数等于 2*n那么我们找到重复的数字然后遍历元素检查每个数字的出现:1、2、3 等等。
如果这些数字中的任何一个都不存在,那么将该数字作为缺失的数字返回。
这种方法的问题是这种方法很慢,对于一个简单的问题引入了太多的步骤,并且可以用一种更好的方式来完成。
* * *
## 寻找缺失和重复元素的更好方法
因此,我们将创建一个额外的数组,它将考虑一个元素是否被访问。数组的大小与 n 的值相同。
最初,所有的值都等于 0(不可见),当一个元素出现在数组中时,它在最终数组中的值被设置为 1(可见)。
这一直持续到数组的末尾。我们必须计算两件事:重复的数字和缺失的数字。
如果在任何时候,其值被设置的数字已经被设置,那么这意味着该数字是重复的数字。
现在,为了计算丢失的数字,我们将最后一次遍历最终数组,并检查最终数组中哪个数字的值仍然是 0。这意味着这个数字从未出现过因此它是数组中缺失的数字。
我们将以包含两个值的列表的形式返回这两个值:第一个是重复的数字,第二个是缺失的数字。
* * *
## 用 python 实现
我希望你清楚这一点。现在让我们看一下查找缺失和重复元素的代码实现,以及代码的示例输出。
```py
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])
```
代码的输出如下所示。
```py
Repeating Number: 5
Missing Number: 3
```
* * *
## 结论
我希望你清楚这个概念。你可以用简单和快速的方法自己尝试一下。同样的逻辑也适用于所有的编程语言。
感谢您阅读教程!编码快乐!😇
* * *