python列表操作和集合操作有效率差异嘛

Ans_min Ans_min 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

描述

今天在刷LeetCode,同样实现的是滑动窗口,但是自己用的是列表模拟的队列操作,别人用的是集合操作,耗时差别好大。。。

需要实现的问题 

如果需要看问题题干可以移步:博客链接

代码对比

这个是我自己实现的代码如下

class Solution(object):
    def containsNearbyDuplicate(self, nums, k):
        queue = []
        for i in nums:
            if len(queue) > k:
                queue.pop(0)    # 去头
            if i in queue:
                return True
            queue.append(i)
        return False

提交之后,耗时太多。

在这里插入图片描述

 

别人写的代码如下

class Solution:
    def containsNearbyDuplicate(self, nums, k):
        window = set()
        for i, num in enumerate(nums):
            if len(window) == k + 1:
                window.remove(nums[i - 1 - k])
            if num in window:
                return True
            window.add(num)
        return False

耗时明显低了很多

在这里插入图片描述

疑问 

自己感觉可能是python底层实现的逻辑,导致list的append和pop在数据量大的情况下,比set的remove和add的方法耗时大的结果?

但自己还是不确定,请各位大佬帮忙解释一下。

...全文

相关推荐

基于python的列表list和集合set操作

以下是一些python的list和set的基本操作 1. list的一些操作 list = [1, 2, 3] list.append(5) print(list) list.extend([7, 8]) # extend是将可迭代对象的元素依次加入列表 print(list) list.append([7, 8]) # append是把传入的参数当成一个元素加入列表 print(list) list.reverse() # 元素翻转,注意不能将这个操作赋给一个变量,此操作是对list本身操作,即list自身发生变化 # l=list.reverse() l为空,没有得到list翻转后的值

weixin_38714910

关于Python元祖,列表,字典,集合的比较

定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,’abc’,4.56,[‘inner’,’list’],7-9j] 1.list(str):将str转换成list类型,str可以使字符串也可以是元组类型 2.aList.append(‘test’):追加元素到列表中去 3.del aList[1]:删除列表中下标为1的元素 del aList:删除整个列表 4.cmp(list1,list2):比较两个列表的大小 5.len(list):返回列表元素个数 6.sorted(list):使用字典序对列

weixin_38731075

Python列表和元组的定义与使用操作示例

主要介绍了Python列表和元组的定义与使用操作,结合实例形式分析了Python中列表和元组的功能、区别、定义及使用方法,需要的朋友可以参考下

weixin_38606404

python学习笔记(二)之元组,集合,列表,字典的概念和区别(四)

集合 set一:基本概念1.1 定义1.2 初始化集合二:集合的特性2.1 去重2.2 成员操作符2.3 for循环2.4 枚举三:常用方法3.1 增3.2 删3.3 排序3.4 关系测试3.4.1 并集3.4.2 交集3.4.3 差集3.4.4 对称集3.4.5 子父集3.4.6 判断相交 一:基本概念 1.1 定义 set存储元素不重复、无序数据类型。 1.2 初始化集合 1.2.1 初始化空集合或带值集合: 集合名=set( [ ] ) 1.2.2 初始化空集合: 集合名=set() 1.2.2 初始化包含值的集合: 集合名={数据1,数据2} emptySet=set() empt

weixin_38732924

python 如何快速找出两个电子表中数据的差异

下面小编就为大家带来一篇python 如何快速找出两个电子表中数据的差异。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38601215
评论
收藏 已收藏
分享
返回顶部
Ans_min
高校算法学习社区 51,730 成员 6,062 内容