使用python对列表(list)去重

本文介绍两种常见的Python列表去重方法:传统循环法和利用set集合去重法,并演示如何保持去重后列表元素的原始顺序。

在处理列表去重时,整理方法如下。希望对这方面知识又困惑的人能有所帮助。

常见方法:

lis = [1,2,4,3,5,3,8,7,6,4,5]
news_lis = []
for ls in lis:
    if ls not in news_lis:
        news_ids.append(ls)
print news_ids

set()集合方法:

#使用set集合对列表去重,但set不会将列表按照原来的顺序排列
>>> l = [5,6,3,4,2,5,8,7,3,4]
>>> set(l)
set([2, 3, 4, 5, 6, 7, 8])
>>>

#此方法所得去重列表相比原列表无序
>>> lis = [1,2,4,3,5,3,8,7,6,4,5]
>>> s = list(set(lis))
>>> s
[1, 2, 3, 4, 5, 6, 7, 8]
>>>

#此方法所得去重列表按照原列表的顺序排列
>>> ls = [1,2,4,3,5,3,8,7,6,4,5]
>>> new_ls = list(set(ls))
>>> new_ls.sort(key=ls.index)
>>> new_ls
[1, 2, 4, 3, 5, 8, 7, 6]
>>>
### ### 方法一:使用 `for` 循环 通过遍历原始列表,并将首次出现的元素添加到新的列表中,可以实现功能。这种方式可以保证元素的顺序,同时避免复元素的出现。 ```python list1 = [3, 2, 1, 3, 4, 7, 1, 5, 2, 1, '测试1', '测试2', '测试1', '测试3'] temp = [] for i in list1: if i not in temp: temp.append(i) print(temp) ``` 输出结果为 `[3, 2, 1, 4, 7, 5, '测试1', '测试2', '测试3']` [^2]。 ### ### 方法二:使用列表推导式 结合 `for` 循环和条件判断,可以通过列表推导式实现功能。该方法在代码上更加简洁,但内部逻辑与 `for` 循环一致。 ```python list1 = [3, 2, 1, 3, 4, 7, 1, 5, 2, 1, '测试1', '测试2', '测试1', '测试3'] temp = [] [temp.append(i) for i in list1 if i not in temp] print(temp) ``` 输出结果为 `[3, 2, 1, 4, 7, 5, '测试1', '测试2', '测试3']` 。 ### ### 方法三:使用 `set` 利用 `set` 数据结构的特性(不允许复元素),可以快速实现列表。然而,`set` 是无序的,因此转换后的列表顺序可能与原始列表不一致。 ```python lista = ['1', '2', '1', '2', '3', '4', '2'] result = list(set(lista)) print(result) ``` 输出结果可能为 `['1', '3', '2', '4']` 或其他顺序不一致的结果 [^3]。 ### ### 方法四:保留顺序的方法 如果需要的同时保留原始顺序,则可以通过遍历原始列表,并将首次出现的元素添加到新列表中。这种方式与 `for` 循环的原理一致,但代码更加简洁。 ```python lista = ['1', '2', '1', '2', '3', '4', '2'] list_ = [] for a in lista: if a not in list_: list_.append(a) print(list_) ``` 输出结果为 `['1', '2', '3', '4']`,顺序与原始列表一致 。 ### ### 方法五:倒序 通过倒序遍历列表并删除复元素的方式,也可以实现功能。该方法利用了 `count()` 和 `remove()` 方法,但需要注意删除操作可能对原始列表造成影响。 ```python lista = ['1', '2', '1', '2', '3', '4', '2'] [list.remove(i) for i in lista[::-1] if lista.count(i) > 1] print(lista) ``` 输出结果可能为 `['1', '3', '4', '2']`,具体顺序取决于原始列表和操作过程 [^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值