随着人工智能的发展,Python变得越来越流行了 。而Python语言中列表(List)与其他语言的数组(Array)类似,是一种有序的集合数据结构,但Python List可支持各种数据类型,长度也可动态调整,与JS中的数组或JAVA ArrayList很接近 。在实际编程中,我们会遇到数组或列表去掉重复项的需求 。那么在Python编程中,我们会有很多种方法来实现这个目标,有的新建列表来存储非重复项,有的则在原有基础上删除掉重复的项,有的则利用数据结构来达到去重复的目的 。具体哪一种方法更好呢?只能说根据不同场景来选择一种,以下的N种方式将有助于对于基础算法和语言学习的理解 。
文章插图
方式
## 1. 新建列表,如果新列表中不存在,则添加到新列表def unique(data):newList = []for item in data:if item not in newList:newList.Append(item)print("for list + not in. data:", newList)# testdata = ['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()unique(data)print("time:" + str((time.time() - start_time) * 1000) + " ms")# result$ python -VPython 2.7.16$ python unique.py ('for list + not in. data:', ['a', 1, 2, 'b'])time:0.0441074371338 ms
## 2. 新建列表 。根据下标判断是否存在新列表中,如果新列表中不存在则添加到新列表def unique(data):newList = []for i in range(len(data)):if data[i] not in newList:newList.append(data[i])return newList# testdata = ['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("for range + not in. data:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 3. 通过index找不到该项,则追加到新列表中 。index找不到会报错,因此放在异常处理里def unique(data):newList = []for i in range(len(data)):item = data[i]try:if (newList.index(item) < 0):print('newList:', newList)except ValueError:newList.append(item)return newList# testdata = https://www.isolves.com/it/cxkf/yy/Python/2020-05-03/['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("list index + except:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 4. 新建列表,两个循环 。如果内循环与外循环项相同,且下标相同就添加到新列表,其余忽略def unique(data):newList = []for i in range(len(data)):j = 0while j < i:j += 1if data[i] == data[j]:if (i == j):newList.append(data[i])breakreturn newList# testdata = https://www.isolves.com/it/cxkf/yy/Python/2020-05-03/['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("new list + for. newList:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 5. 在原有列表上移除重复项目 。自后往前遍历,逐个与前面项比较,如果值相同且下标相同,则移除当前项 。def unique(data):l = len(data)while (l > 0):l -= 1i = lwhile i > 0:i -= 1if data[i] == data[l]:del data[l]breakreturn data# testdata = ['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("one list while. last -> first result. data:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 6. 在原有列表上移除重复项目 。自前往后遍历,逐个与后面项比较,如果值相同且下标相同,则移除当前项 。def unique(data):l = len(data)i = 0while i < l:j = i + 1while j < l:if data[i] == data[j]:del data[j]l -= 1i -= 1breakj += 1i += 1return data# testdata = ['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("one list while. first -> last result. data:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 7. 新建列表 。遍历列表,利用index比较出现的位置,如果出现在第一次的位置则追加到新数组def unique(data):newList = []for i in range(len(data)):if i == data.index(data[i]):newList.append(data[i])return newList# testdata = ['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("for range + index. data:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 8. 利用字典属性唯一性来实现去重复 。def unique(data):obj = {}for item in data:obj[item] = itemreturn obj.values()# testdata = https://www.isolves.com/it/cxkf/yy/Python/2020-05-03/['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()print("list + dict:", unique(data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
## 9. 利用filter函数,即把不符合条件的过滤掉 。这里filter不支持下标,因此需要借助外部列表存储不重复项def uniq(item):i = data.index(item)if (item not in newList):newList.append(item)return Truereturn False# testdata = https://www.isolves.com/it/cxkf/yy/Python/2020-05-03/['a', 'a', 1, 1, 2, 2, 'b', 'b', 2, 1]start_time = time.time()newList = []print('filter + list + not in: ', filter(uniq, data))print("time:" + str((time.time() - start_time) * 1000) + " ms")
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 12类 Python 内置函数帮你打好基础
- 国庆假期苏州旅游火了!这些经典景点没去过就算白去,游客必打卡
- 月球背面到底有什么? 月球背面为什么去不了
- GUI Python图形用户界面- tkinter
- 想做网站,域名去哪里买比较好?
- 使用sublime打造一个终极版的Python开发编辑环境
- 永久去狐臭小妙招
- 网上开店货源怎么找 开网店去哪里找货源比较好
- 《光遇》樱花海怎么去?
- 如何正确选择杭白菊或者贡菊,桐乡去哪买杭白菊