原文链接 :https://www.the5fire.com/python-remove-duplicates-in-list.html
直观方法
最简单的思路就是:
-
ids
=
[
1
,
2
,
3
,
3
,
4
,
2
,
3
,
4
,
5
,
6
,
1
]
-
news_ids
=
[]
-
for
id
in
ids
:
-
if
id
not
in
news_ids
:
-
news_ids
.
append
(
id
)
-
-
print
news_ids
这样也可行,但是看起来不够爽。
用set
另外一个解决方案就是用set:
-
ids
=
[
1
,
4
,
3
,
3
,
4
,
2
,
3
,
4
,
5
,
6
,
1
]
-
ids
=
list
(
set
(
ids
))
这样的结果是没有保持原来的顺序。
按照索引再次排序
最后通过这种方式解决:
-
ids
=
[
1
,
4
,
3
,
3
,
4
,
2
,
3
,
4
,
5
,
6
,
1
]
-
news_ids
=
list
(
set
(
ids
))
-
news_ids
.
sort
(
key
=
ids
.
index
)
# 感谢网友:@Magic 指正。
使用itertools.grouby
文章一开始就提到itertools.grouby, 如果不考虑列表顺序的话可用这个:
-
ids
=
[
1
,
4
,
3
,
3
,
4
,
2
,
3
,
4
,
5
,
6
,
1
]
-
ids
.
sort
()
-
it
=
itertools
.
groupby
(
ids
)
-
-
for
k
,
g
in
it
:
-
print
k
关于itertools.groupby的原理可以看这里:http://docs.python.org/2/library/itertools.html#itertools.groupby
网友补充:用reduce
网友reatlk留言给了另外的解决方案。我补充并解释到这里:
-
In
[
5
]:
ids
=
[
1
,
4
,
3
,
3
,
4
,
2
,
3
,
4
,
5
,
6
,
1
]
-
-
In
[
6
]:
func
=
lambda
x
,
y
:
x
if
y
in
x
else
x
+
[
y
]
-
-
In
[
7
]:
reduce
(
func
,
[[],
]
+
ids
)
-
Out
[
7
]:
[
1
,
4
,
3
,
2
,
5
,
6
]
上面是我在ipython中运行的代码,其中的 lambda x,y:x if y in x else x + [y] 等价于 lambda x,y: y in x and x orx+[y] 。