85 lines
3.0 KiB
Markdown
85 lines
3.0 KiB
Markdown
# 在 Python 中查找缺失和重复的元素[简单的一步一步]
|
||
|
||
> 原文:<https://www.askpython.com/python/examples/missing-and-repeating-elements>
|
||
|
||
嘿伙计们!因此,在本教程中,我们将理解这个简单的问题,即在一系列数字中寻找**缺失和重复的元素**。让我们通过一个例子来理解这个问题,考虑下面给出的 n = 6 的数字列表。
|
||
|
||
| one | Two | four | five | five | six |
|
||
|
||
缺失的数字是 1,2,3…中不存在的数字。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
|
||
|
||
```
|
||
|
||
* * *
|
||
|
||
## 结论
|
||
|
||
我希望你清楚这个概念。你可以用简单和快速的方法自己尝试一下。同样的逻辑也适用于所有的编程语言。
|
||
|
||
感谢您阅读教程!编码快乐!😇
|
||
|
||
* * * |