list ,set 和 frozenset的 区别

list的具体实现方法:见https://blog.csdn.net/lucky404/article/details/79596319 or 印象笔记 Python 列表源码解析

源码没看太懂,但是用实验的方式来看了一下list 中append, remove 和 set 中add 和 remove 的时间复杂度

import numpy as np

class TestTime:

    @classmethod
    def DuplicatesInSortedArray(cls, size = 1000):
        arr = []
        for i in range(size//2):
            arr.append(i)
            arr.append(i)
        return arr

    @classmethod
    def notSortedArray(cls, low = 1, high = 1000, size = 1000):
        return list(np.random.randint(low, high, size))
from TestTime import TestTime
from UsingArray.SortColors75 import Solution
import time

for i in range(15,25):
    size = 2 ** i
    nums = TestTime.notSortedArray(size=size)
    ll = set(nums)
    ll.add(1)
    # start = time.time()
    # nums.append(0)   #O(1)的时间复杂度
    # end = time.time()
    # print('size=',size, ' list append time=',end - start)

    # start = time.time()
    # nums.remove(nums[0])  # O(n)的时间复杂度
    # end = time.time()
    # print('size=', size, ' list remove time=', end - start)

    # start = time.time()
    # re = 10 in nums  #O(n)的时间复杂度,不太确定
    # end = time.time()
    # print('size=', size, ' list exits time=', end - start)

    # start = time.time()
    # ll.add(0)  # O(1)的时间复杂度
    # end = time.time()
    # print('size=', size, ' set add time=', end - start)

    start = time.time()
    re = 1 in ll  # O(1)的时间复杂度
    end = time.time()
    print('size=', size, ' set remove time=', end - start)

暂且认为:

list 中append的时间复杂度为O(1), insert 和remove的时间复杂度为O(n)(因为涉及到元素的移动)

      但是不能从实验数据中确定  x在list中(x in list)  的时间复杂度

set 中 add , remove ,x在set中(x in set) 的时间复杂度的时间复杂度为O(1)

set 和 frozenset 的区别为一个可变,有add和remove方法,一个不可变,没有add 和remove方法。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值