【Python】如何对列表进行减法操作?
文章目录
- 引言
- 方法
- 解决方案1(推荐使用,速度更快)
- 解决方案2
- 实验
- 参考
引言
列表 a 中有若干元素,列表 b 有若干元素,现要求使用 Python 3 编程,找出属于列表 a 但又不属于列表 b 的所有元素,并放到一个新定义的列表 c 里面。相当于用编程实现如下列表减法公式:
c = a − b ( ∀ i ∈ c , i ∈ a , i ∉ b ) c = a - b (\forall i \in c, i \in a, i \notin b ) c=a−b(∀i∈c,i∈a,i∈/b)
方法
解决方案1(推荐使用,速度更快)
先将列表转为集合,然后做减法操作:
>>> list_a = [1, 2, 3, 4, 5]
>>> list_b = [3]
>>> list_c = list(set(list_a)-set(list_b))
>>> list_c
[1, 2, 4, 5]
解决方案2
For 循环遍历列表 a,判断是否在列表 b 中:
>>> list_a = [1, 2, 3, 4, 5]
>>> list_b = [3]
>>> list_c = [i for i in list_a if i not in list_b]
>>> list_c
[1, 2, 4, 5]
实验
对于 Python 中的列表减法问题,我们有两个解决方案。很明显方案 1 要比方案 2 要简单,但当处理大列表的时候,两者的速度如何?我们写代码做一个简单的实验来看一下。
import random
import timedef test(num):list_a = list(range(num))list_b = random.choices(list_a, k=int(num*0.001))def test_solution_1():t1 = time.time()list_c = list(set(list_a)-set(list_b))t2 = time.time()print(round(t2-t1, 2)) # 0.05sdef test_solution_2():t1 = time.time()list_c = [i for i in list_a if i not in list_b]t2 = time.time()print(round(t2-t1, 2)) # 14.47stest_solution_1()test_solution_2()if __name__ == '__main__':test(int(1e6))
列表 a 中有 100 万个元素,从中随机抽取 0.001 个百分比作为列表 b 中的元素,然后分别使用以上两种解决方案,计算时间。方案 1 用了 0.05 秒,方案 2 用了 14.47 秒,想必以后采用何种方案大家心里都应该清楚了。
参考
https://www.cnblogs.com/python-selenium/p/3909175.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
