欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python基础数据结构

程序员文章站 2024-01-27 14:26:46
...


列表(list)

列表本身是动态的数据结构,每次会提前申请一部分空间,直到用完以后再重新申请,而不是每次用多少申请多少,类似与C#中的StringBuilder

适用于数据或数量是可变的场景

元组(tuple)

元组本身是静态结构,每次定义后就不可再变,每次变化相当于重新申请一个新的元组,特性类似于C#中的string。

适用于存储的数据和变量不变的场景。

字典(dict)

字典本身是一个键值对结构,可以动态申请,Key的存储是基于hash函数,因此等值查找的时间复杂度可以到O(1)。

集合(set)

类似字典也是基于hash函数,不过只是一个集合,而没有键值对,集合是不能有重复值的,因此可以用于去重(sql distinct),这个的效率比列表高不少,下面例子可以查看到对比

def findProductPrice(products,productId):
    for id, price in products:
        if id == productId:
            return price
    return None

def findUniquePriceByList(products):
    uniqueList = []
    for _,price in products:
        if price not in uniqueList:
            uniqueList.append(price)
    return len(uniqueList)
def findUniquePriceBySet(products):
    uniqueSet = set()
    for _,price in products:
        uniqueSet.add(price)
    return len(uniqueSet)
products = [(1111,1),(2222,2),(3333,3)]
print('The price of product 1111 is {}'.format(findProductPrice(products,1111)))
print('number of unique price is {}'.format(findUniquePriceByList(products)))
p2 = {1111:1,2222:2,3333:3}
print('The price of product 1111 is {}'.format(p2[1111]))
print('number of unique price is  {}'.format(findUniquePriceBySet(products)))

import time

id = [x for x in range(0,10000)]
price = [x for x in range(20000,30000)]
product1 = list(zip(id,price))

startUsingList = time.perf_counter()
findUniquePriceByList(product1)
endUsingList = time.perf_counter()
print('time elapse using list: {}'.format(endUsingList - startUsingList))

startUsingList = time.perf_counter()
findUniquePriceBySet(product1)
endUsingList = time.perf_counter()
print('time elapse using set: {}'.format(endUsingList - startUsingList))

Python基础数据结构

字符串(str)

字符串跟C#里的string类似,有几个特点或区别

  1. 增加了三引号,即可以使用单引号,双引号和三引号
  2. 增加了切片操作,不过,一样可以索引读取,一样内容不可变
  3. +=操作做了优化,并非每次都重新省去空间,也可能是直接对将操作者后面增加buff(下面例子对比用时)
  4. 格式化输出使用.format方式,当然也可以直接用字符串拼接,只是格式化更易读
import time

startTime = time.perf_counter()
s = ''
for n in range(0,100000):
    s += str(n)
endTime = time.perf_counter()
print('string elapse using +=: {}'.format(endTime - startTime))

startTime = time.perf_counter()
l = []
for n in range(0,100000):
    l.append(str(n))
s = ''.join(l)
endTime = time.perf_counter()
print('string elapse using list: {}'.format(endTime - startTime))

Python基础数据结构