前言:
现时大家对“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)