您当前的位置: 首页 >  Python

Xavier Jiezou

暂无认证

  • 2浏览

    0关注

    394博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Python】如何对列表进行减法操作?

Xavier Jiezou 发布时间:2021-12-14 17:03:11 ,浏览量:2

文章目录
  • 引言
  • 方法
    • 解决方案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 time


def 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.05s

    def 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.47s

    test_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

关注
打赏
1661408149
查看更多评论
立即登录/注册

微信扫码登录

0.2634s