Python常用数据结构:元组,列表,字典,集合
目录
1.元组
创建元组
#创建最简单的元组
tup=2,3,4
tup
#输出:(2, 3, 4)
#当元组内的对象是更复杂的表达式时,需要用括号将值括起来
tmp=(0,1),2
tmp
#输出:((0, 1), 2)
元组本身是不可以被修改(比如上面两个例子),但是在内部的对象可能是可以修改的
tup=('123',[213,231,2],4)
tup[1].append(3)
tup
#输出:('123', [213, 231, 2, 3], 4)
#元组可以使用+连起来,和C++中的字符串类的操作相同
tmp=tuple('Hello')
#元组的英文是tuple,而tuple也是元组的转化函数
tmp
#输出:('H', 'e', 'l', 'l', 'o')
tup=2,3,4
tmp+tup
#输出:('H', 'e', 'l', 'l', 'o', 2, 3, 4)
元组乘整数可以生成多份对象的拷贝
tmp=tmp*2
tmp
#输出:('H', 'e', 'l', 'l', 'o', 'H', 'e', 'l', 'l', 'o')
#即原对象只有一份tmp和新的拷贝都是('H', 'e', 'l', 'l', 'o')的引用,而对象本身没有被复制
tmp.count('H')
#输出:2
#count函数可以统计元组中某一字符的数量
#元组的元素也可以通过索引的方式获取,与C/C++中的数组相似
元组拆包
#第一种方式
#变量与元组中的对象的个数相同
tup=('123',[213,231,2],4)
a,b,c=tup
b
#输出:[213, 231, 2, 3]
#第二种方式
#使用*rest(rest这个名称可以改变,比如*t,*a都可以)
s,*rest=tup
rest
#输出:[[213, 231, 2, 3], 4]
s,*t=tup
t
#输出:[[213, 231, 2, 3], 4]
2.列表
gen=range(1,10)
list(gen)
#输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
#list常用于将迭代器和生成器转化为列表
list1=['golden','warriors']
list2=['championship']
list=list1+list2
list
#输出:['golden', 'warriors', 'championship']
#列表也可以用+进行连接
#添加元素
list.append("wiggins")
list
#输出:['golden', 'warriors', 'championship', 'wiggins']
#在特定位置插入
list.insert(4,'leo')
list
#输出:['golden', 'warriors', 'championship', 'wiggins', 'leo']
#将特定位置的元素删除并返回
list.pop(4)
list
#输出:['golden', 'warriors', 'championship', 'wiggins']
#找到第一个符合的值并删除
list.append('james')
list.remove('james')
list
#输出:['golden', 'warriors', 'championship', 'wiggins']
#排序
list0=[7,34,32,4,1]
list0.sort()
list0
#输出:[1, 4, 7, 32, 34]
list.sort()
list
#输出:['championship', 'golden', 'warriors', 'wiggins'](结果按首字母排序)
#传递二级排序key(按长度排序)
list.sort(key=len)
list
#输出:['golden', 'wiggins', 'warriors', 'championship']
#二分搜索和插入(用于排序后的列表)
#首先需要引入bisect模块,即import bisect
import bisect
bisect.bisect(list0,3)
#bisect.bisect会找到元素应当被插入的位置,并返回
#输出:1
bisect.insort(list0,3)
#输出:[1, 3, 4, 7, 32, 34]
#在列表中插入多个元素
list0.extend([43,76,12])
list0.sort()
list0
#输出:[1, 3, 4, 7, 12, 32, 34, 43, 76]
#切片
#list0=[1, 3, 4, 7, 12, 32, 34, 43, 76]
list0[0:2] #索引的起始和终止
#输出:[1, 3]
list0[2:]
#输出:[4, 7, 12, 32, 34, 43, 76]
list0[:2]
#输出:[1, 3]
#有结果可以看出结果不包括终止(右端点)
list0[-2:]
#输出:[43, 76]
#反转列表(步进值为-1)
list0[::-1]
#输出:[76, 43, 34, 32, 12, 7, 4, 3, 1]
#销毁列表
del list,list0,list1,list2
3.内建序列函数
3.1enumerate函数
#enumerate函数可以返回(i,value),即索引和元素的值
#list=['golden', 'wiggins', 'warriors', 'championship']
map={} #这里的map是一个字典
for i,v in enumerate(list):
map[v]=i
map
#输出:{'golden': 0, 'wiggins': 1, 'warriors': 2, 'championship': 3}
3.2sorted函数
#返回一个排序好的列表
sorted("hello world")
#输出:[' ', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
3.3zip函数
关于zip函数更详细的描述可以看这篇文章http://t.csdnimg.cn/9P02A
#zip函数可以将列表、元组的元素配对,新建一个元组构成的列表:
list1.clear()
list2.clear()
list1=['Andrew','Luka','Leborn']
list2=['wiggins','Donic','James']
zipped=zip(list1,list2)
zipped=list(zipped)
zipped
#输出:[('Andrew', 'wiggins'), ('Luka', 'Donic'), ('Leborn', 'James')]
#生成列表长度由最短的序列决定
list3=['win','lose']
list(zip(list1,list2,list3))
#输出:[('Andrew', 'wiggins', 'win'), ('Luka', 'Donic', 'lose')]
#zip用于同时遍历多个序列,和enumerate配合使用
for i,(a,b) in enumerate(zip(list1,list2)):
print("{0}:{1},{2}".format(i,a,b))
#输出:
0:Andrew,wiggins
1:Luka,Donic
2:Leborn,James
#拆分已经配对的序列
obj=zipped
first_name,last_name=zip(*zipped)
first_name
#输出:('Andrew', 'Luka', 'Leborn')
last_name
#输出:('wiggins', 'Donic', 'James')
3.4reversed函数
list(reversed(range(0,10)))
#输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
#reversed是一个生成器,所以在没有实例化(如list函数)的时候不会生成列表
参考书籍:《利用Python进行数据分析》Wes McKinney
喜欢的小伙伴还请点赞收藏,(❁´◡`❁)( o=^•ェ•)o ┏━┓