龙空技术网

少儿Python每日一题(20):整数去重操作

凤城老人 140

前言:

现时大家对“python 列表去重”大体比较关心,你们都需要知道一些“python 列表去重”的相关知识。那么小编同时在网摘上搜集了一些有关“python 列表去重””的相关知识,希望同学们能喜欢,各位老铁们一起来了解一下吧!

原题解答

本次的题目如下所示:

给定一个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。

输入格式

输入一行,n 个整数,整数之间以一个空格分开。每个整数大于等于 10 、小于等于 100。

输出格式

输出一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。

输入样例:

10 12 98 18 12 18 21

输出样例:

10 12 98 18 21

本题是一个典型的去重问题,去重问题的处理方式有很多,我们这里介绍一下常用的去重方法:

一、集合去重法

Python中的集合类型具有元素不重复的特征,如果使用将列表转换成集合,再转换回列表类型,重复的值将自动去除掉。该方法虽然简单,但是会带来一个问题:集合是一个无序序列,将列表转换为集合,再由集合转换成列表后,结果的顺序不受控制,会造成失分

这种方法在实际做题中不建议使用,但是在实际应用中却十分方便,因此我们在这里提一下。我们看一下具体的代码:

a = list(map(int, input().split()))a = set(a)a = list(a)print(*a)

程序运行的结果为:

98 10 12 18 21

该方法虽然实现了去重的功能,但是结果的顺序并未符合题目的要求。

二、遍历筛选法

我们可以对元素进行遍历,将元素存入一个新的列表中。并对每个元素进行判断,如果新列表中该元素不存在,则添加;如果新列表中已经含有该元素,则不添加。该方法从第一个元素开始遍历到最后一个元素,确保了在去重过程中元素的顺序。

a = list(map(int, input().split()))b = []for item in a:    if item not in b:        b.append(item)print(*b)

使用该方法结果与题目的要求相符,实现了去重并保证了新列表保持了原有的顺序。

本题拓展

本题考查的是数据去重的操作,题目难度★★

数据去重的题型除了保留唯一值之外,还有去除连续相同的值,基本的思路还是一致。都是使用一边遍历一边筛选的方法。我们看下面这道题(题目来源:洛谷):

一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?

如图:地高变化为 0 1 0 2 1 2 0 0 2 0

输入格式

连续n个数表示地平线高度变化的数据,保证首尾为0。(3<=n<=10000,0<=高度<=1000)

输出格式

一个数,可能积水低洼地的数目。

输入样例

0 1 0 2 1 2 0 0 2 0

输出样例

3

通过题目的条件,我们可以得出,两边的高度都比它高,那就会形成一块“低洼地”。因此,我们只需要进行大小判断即可。但问题在于,有可能会出现连续相同的数,如图中③的位置所示。

我们在进行大小判断之前,先得去除连续相同的数。在连续相同的数字都去除掉以后,我们就可以比较一个数是否前面的和后面的两个数都比它大,满足条件就是一块“低洼地”。

通过该思路的分析,我们得到程序的代码如下所示:

a = list(map(int, input().split()))b = []n = 0b.append(a[0]) # b列表中先添加第一个元素for i in range(1, len(a)): # 从第2个元素开始遍历    if a[i] != a[i-1]:         b.append(a[i])  # 如果当前遍历到元素不等于前面一个元素,则添加for i in range(1, len(b) - 1):    if b[i] < b[i-1] and b[i] < b[i+1]:        n += 1 # 如果当前值同时满足小于前后的值,则为低洼地print(n) 

标签: #python 列表去重 #python循环删除集合中的元素和元素 #python如何去除列表中的重复元素