-
Notifications
You must be signed in to change notification settings - Fork 0
Python 列表间相减
EricCml edited this page Jan 4, 2022
·
1 revision
要根据一个list里面的元素删除另一个list中的对应的元素,用了几种不同的方法,记录总结一下
假设我有这样两个list:
-
一个是list1
list1 = [1, 2, 3, 4, 5]
-
一个是list2
list2 = [1, 4, 5]
-
我们如何得到一个新的list,list3
list3 = [2, 3]
list3中包括所有不在list2中出现的list1中的元素。
即:list3 = list1 - list2
(数学意义上的求集合差集)
filter(function, iterable)
其中,function 为函数,iterable 为序列
函数可以单独写,也可以直接写在 filter 里面。
注意:filter 是一个generator
,所以要把输出转换成 list
来查看得到的结果
need_issue_number = list(filter(lambda x: x not in already_issue_number, issue_number_list))
# 输出:Get done in 8.4367375 seconds
need_issue_number = []
for x in issue_number_list:
if x not in already_issue_number:
need_issue_number.append(x)
# 输出:Get done in 8.5331984 seconds
need_issue_number = [x for x in issue_number_list if x not in already_issue_number]
# 输出:Get done in 8.3064038 seconds
# 求集合差集:第一种写法,直接相减
need_issue_number = list(set(issue_number_list) - set(already_issue_number))
# 求集合差集:第二种写法,使用difference函数
need_issue_number = list(set(issue_number_list).difference(set(already_issue_number)))
# 列表排序
need_issue_number.sort()
# 输出:Get done in 0.0031899999999999984 seconds
原理:set
(集合)中重复的项会被删除
在列表很大时,第三种方式最快,而且领先其他两种方式很多