Python内建数据结构(元组和列表)

Python常用数据结构:元组,列表,字典,集合

目录

1.元组

2.列表

3.内建序列函数

3.1enumerate函数

3.2sorted函数

3.3zip函数

3.4reversed函数


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 ┏━┓


  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值