本文首发于我的博客

徐小晋的博客 | Xu Xiao Jin​jiayouxujin.github.io

python的列表、元组、字典、集合​jiayouxujin.github.io

前言

本文对python的四种基本类型 列表、元组、字典、集合有个全貌的了解,并且分析其性能,不同的应用场景。

Overview of Python Lists and Tuples

在python中经常被创建的数据类型就是列表(list)和元组(tuple)

相同点:都是存放有一定的顺序存放对象和值,这些值或对象可以是任何类型,包括None空类型

不同点:列表是可变的,即长度可以发生改变。元组不可发生改变,意味着一旦元组被创建的时候,其对象不能够被天剑或者删除,顺序也不会发生改变。

Show me the code

#creating a python list or tuple
lst=[1,2,'three']
tup=(1,2,'three')
​
print(lst)
print(tup)
​
#to create a tuple with only one value,add a trailing comma to the value
tup2=0,
print(tup2)
#the below code will not do the work with a tuple only one value
tup3=(0)
print(tup3)
​
#Get python list or tuple values
print(lst[0])
print(lst[-1])
print(tup[0])
print(tup[-1])
​
#Slicing python lists and tuples
print(lst[0:2])
print(tup[1:5])
​
#assiging a python list value by index
lst[0]='ONE'
print(lst)
​
# error 'tuple' object does not support item assignment
# tup[0]='ONE'
# print(tup)
​
#adding to a python list
lst+=[None]
print(lst)
lst.append(5)
print(lst)
​
#the python del keyword for Lists
del lst[3]
print(lst)
​
del lst[2:]
print(lst)
​
#the concatenation works in tuple
tup+=(4,)
print(tup)
​
---
结果
[1, 2, 'three']
(1, 2, 'three')
(0,)
0
1
three
1
three
[1, 2]
(2, 'three')
['ONE', 2, 'three']
['ONE', 2, 'three', None]
['ONE', 2, 'three', None, 5]
['ONE', 2, 'three', 5]
['ONE', 2]
(1, 2, 'three', 4)

我们来一个一个分析

  1. 创建list和tuple通过 []又或者可以通过调用list()函数 lst=list([1,2,'three']),同样tuple可以通过()又或者可以通过tup=tuple((1,2,'three'))
  2. 通过索引访问list和tuple的值,并且还支持负索引
  3. list和tuple支持切片操作
  4. 通过索引分配值给list以及、通过del函数可以对list删除、通过+添加list
  5. tuple只支持+,但是这里特别注意,这里是重新开辟一块内存,创建新的元祖

补充点别的:

lst=[1,2,3]
tup=(1,2,3)
​
print(list(tup))
print(tuple(lst))
---
结果
[1, 2, 3]
(1, 2, 3)
#lst和tup可以通过函数相互转换
​
lst=[1,2,3,3]
tup=(1,2,3,3)
​
print(lst.count(3))
print(tup.count(3))
​
print(lst.index(3))
print(tup.index(3))
​
lst.reverse()
print(lst)
lst.sort()
print(lst)
​
#error tuple object has no attribute reverse
# print(tup.reverse())
# print(tup.sort())
​
print(list(reversed(tup)))
print(sorted(tup))
​
---
结果
2
2
2
2
[3, 3, 2, 1]
[1, 2, 3, 3]
[3, 3, 2, 1]
[1, 2, 3, 3]

分析一下

  1. count(item)统计列表/元组中Item出现的次数
  2. index(item)统计列表/元组中item第一次出现的索引
  3. list.reverse()和list.sort()分别表示原地倒转列表和排序(注意1.返回值是None,如果使用print(list.reverse()) 2.元组没有内置这两个函数,会报错)
  4. reversed()和sorted()同样表示对列表/元组进行倒叙和排序,但是会返回一个结果

深入性能

lst=[1,2,3]
tup=(1,2,3)
​
print(lst.__sizeof__())
64
print(tup.__sizeof__())
48

分析一下:

列表虽然跟元组存储一样多的元素个数,但是却比元组多16字节,这是因为列表是动态的,它需要存储一个指针,用来指向对应的元素(int型 8字节),而且因为其长度时可变的,需要额外的存储已经分配的长度(8字节)

l=[]
print(l.__sizeof__())
40
l.append(1)
print(l.__sizeof__())
72
l.append(2)
print(l.__sizeof__())
72
l.append(3)
print(l.__sizeof__())
72
l.append(4)
print(l.__sizeof__())
72
l.append(5)
print(l.__sizeof__())
104

通过运行结果,我们可以看到,list为了减少每次增加/删减的性能开销,每次都会额外分配一些空间(这个跟java的hashmap有点像)

这里还有一点注意的是

前面lst=[1,2,3]是直接初始化,所以只会分配3个元素的空间

而不断通过append实际上分配了4个元素空间 l=[]...

两者的使用场景

  1. 如果存储的数据和数量不变,比如地点的经纬度,选择元组更合适
  2. 如果数据或者数量是可变的,比如社交平台的日志功能,那么选择列表更合适

Overview of Python Dictionaries and sets

字典其实就是一组通过键值对存储的数据(其中在python3.7后,这些顺序是有序的,否则是没有顺序的),并且可以随意删除数据,增加数据,访问数据(时间复杂度都可以在常数时间内)。其长度大小可变。

注意:the map key,which can be any immutable type,to values,which can be any type,just like the values of a list or tuple.键不能是可变的数据类型,值可以是任意类型

集合相对于字典来讲,就是存储的数据不是以键值对,而是只有值。其他性能基本相同

show me the code

d1={'name':'jason','age':20,'gender':'male'}
d2=dict({'name':'jason','age':20,'gender':'male'})
d3=dict([('name','jason'),('age',20),('gender','male')])
d4=dict(name='jason',age=20,gender='male')
print(d1==d2==d3==d4)
​
s1={1,2,3}
s2=set([1,2,3])
print(s1==s2)
​
#字典操作
print(d1)
print(d1['name'])
print(d1.get('location','null'))
​
#集合访问
print(1 in s1)
​
#增删改
d1['location']='shanghai'
d1['name']='xu'
d1.pop('age')
​
print(d1)
​
s1.add(4)
s1.remove(1)
print(s1)
​
#copy
d4=d1
d5=d1.copy()
​
d5['name']='Jin'
print(d5)
print(d1)
​
d4['name']='Jin'
print(d4)
print(d1)

分析一下:

  1. 创建字典,总共有四种方法,第一种就是直接使用{'key':value}其中用,隔开。后面三种调用dict()函数,dict(mapping)相当于传入一个mapping,dict(iterable)它的初始化过程是 for k,v in iterable: d[k]=v,所以传入的格式[('key',value)],最后一种就是通过key='value' 创建集合的方法有两种{value}以及set([value])
  2. 字典的增删改查分别通过 d['key']=value,d.pop('key'),d['key']=newvalue,d['key']或者d.get('key',default)或者 value in dict
  3. 集合的增删改查 s.add(value),s.remove(value),没有该操作,value in s
  4. 字典的copy,如果直接用“=”实际上这两个引用都会直接指向同一个地址,当其中任意一个发生改变,就会引起其中另外一个发生改变。如果使用copy()函数,这两个指向不同的地址,不会发生冲突性能分析
    字典其实是一个hash表,所以其性能非常高,如果在不发生冲突的情况下。

写在后面

本文对python的四种数据类型进行讨论分别是列表list,元组tuple,字典dict,集合set

总结一下:

列表list,通过[]表示,可以存储各种各样的数据类型,然后有顺序,其长度可以发生改变,并且任意删除,增加,访问。

元组tuple,通过()表示,可以存储各种各样的数据类型,有顺序,其长度不可发生改变,可以任意访问,增加通过+会创建一个新的元组

字典dict,通过{}表示,存储键值对,长度可以改变,可以通过hash的访问,任意删除,增加,修改

集合set,通过{},相对于字典存储值,长度可变,访问不可通过索引,只能通过in,可以添加add(),可以删除remove()

python3 列表倒叙_python的列表、元组、字典、集合相关推荐

  1. python列表元组字典集合实验心得_python学习小总结(列表、元组、字典、集合、字符串)...

    ---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...

  2. python中列表 元组 字典 集合的区别

    参考文章:python中列表 元组 字典 集合的区别

  3. python_列表——元组——字典——集合

    列表--元组--字典--集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...

  4. python 3教程:基于python3实现倒叙字符串

    这篇文章主要介绍了基于python3实现倒叙字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 google测试工程师的一道题: 设计一个函数,使 ...

  5. Python学习第七课-元组字典集合

    Python学习第七课-元组&字典&集合 一.元组 1.1元组简介 1.2元组的拆包 1.3字符串拆包 1.4列表的拆包 1.5拆包练习 二.字典的简介 2.1介绍 2.2操作 三.字 ...

  6. 元组字典集合内置方法与拷贝

    ''' 元组字典集合内置方法与拷贝 ''' # 什么是元组tuple(了解):只可取 不可更改 的列表,元组一创建就被写死了 lt = [1, 2, 3] lt[0] = 2 # 1. 作用:元组一创 ...

  7. Python元组字典集合

    元组&字典&集合 一.tuple元组 1.概述 和列表相似,本质上是一种有序的集合 元组和列表的不同之处: ​ a.列表:[ ] 元组:( ) ​ b.列表中的元素可以进行增加和删除操 ...

  8. python列表方法语句_Python中列表和元组的相关语句和方法讲解

    列表(list): 首先,列表属于序列,那么序列类型可用如下内建函数-- list(iter):把可迭代对象转换为列表. str(obj):把obj对象转换为字符串,即用字符串来表示这个对象. tup ...

  9. python 列表算平均分_python平均列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一个列表:类似: data = , , , ] 我想把这个算出来... 本节 ...

最新文章

  1. 0x07.基本算法 — 贪心
  2. 忽略并存在数据损坏风险_内部审计快速启动数据分析的6个关键点
  3. bzoj1433: [ZJOI2009]假期的宿舍
  4. php正则 贪婪模式与懒惰模式
  5. IoAttachDevice源码
  6. 神秘的“阿里星”是一群怎么样的人
  7. 步步为营-19-正则表达式的简单应用
  8. kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST
  9. 谷歌开源 Python Fire:可自动生成命令行接口
  10. 商城是用jsp还是php,建设网上购物网站使用JSP系统还是ASP系统
  11. 15岁中国学生斩获苹果WWDC奖学金:写代码只用了2个周末
  12. 深度学习去燥学习编码_请学习编码
  13. cpu使用率_单片机里面的CPU使用率是什么鬼?
  14. python中的 DFS 与 BFS
  15. OSChina 初十二乱弹 ——网站都挂了,巴叔被安排出去度假
  16. 2019牛客多校第五场C generator 2(BSGS)题解
  17. CTR 预估模型简介--深度学习篇
  18. XidianOJ 1007 易碎的鸟蛋
  19. 国家软考--高级系统分析师证书
  20. C语言程序写99乘法表,如何用C语言编程序:九九乘法表

热门文章

  1. 在Linux上配置Telnet服务
  2. Build RESTful client
  3. Linux的capability深入分析(1)【转】
  4. Hyper-V虚拟机快照占用磁盘空间过多,导致虚拟机不能启动怎么办
  5. [Oracle]Oracle 各产品的 生命周期
  6. 日期类型存储成字符串类型的格式问题
  7. Vue2.0学习笔记一 :各种表达式
  8. 关于web.xml的格式
  9. Android GPS Location with Listener
  10. python中if __name__ == '__main__': 的解析