Python从小白到大牛 — 第9章 数据结构


有数据就需要有能装他们的容器。python里主要有序列、集合和字典

9.1 元组
9.1.1 序列

序列是一种可迭代的,元素有序、可以重复出现的数据结构。
可迭代(iterable),记住这个词和英语单词,很重要。python出错一看到这个单词你就知道错在哪了。可迭代是指它的成员能返回一次的对象。
序列包括:列表、字符串、元组、范围(range)和字节序列(bytes)。假设这里有个序列

a = ‘hello’

对序列可以进行以下操作:

  • 索引
    • a[0] ==> ‘h’ 第一个字母索引为0
    • a[-1] ==> ‘o’ 最后一个字母索引为 -1
  • 切片 [start : end :step]
    • a[0:2] ==> 'he ’
    • a[1: -1:2] ==> ‘el’
  • 加和乘
    • a+ ‘123’ ==> ‘hello123’
    • a * 3 ==> ‘hellohellohello’
9.1.2 创建元组

元组是一种不可变序列(重点)。以下方式都创建了元组

a=1,2,3,4
a=(1,2,3,4)
a=tuple([1,2,3,4])   # 列表转换成元组
a=(1,)	# 注意,一个元素时必须有逗号,没逗号就是int了
a=() 	# 空元组
9.1.3 访问元组

通过索引访问,也可以切片
这里重点是拆包,灵活应用拆包,可以将一些复杂的工作简单化

>>> a = ('张三','男','35岁')
>>> name, gender, age = a	# 将a的值一一对应拆包成三个变量
>>> name
'张三'
>>> gender
'男'
>>> age
'35岁'
9.2 列表

列表是一种可变序列,可追加、插入、删除和替换列表中的元素

9.2.1 列表创建

以下方式都创建了列表

a=[]
a=[1,2,3]
a=list((1,2,3))
9.2.2 追加元素

追加单个元素,用append(),如追加列表,可用"+"或extend()

>>> a = ['a','b']
>>> a.append('c')
>>> a
['a', 'b', 'c']
>>> a + ['123']
['a', 'b', 'c', '123']
>>> a.extend('123')				# 这里要注意,extend()如果是字符串,要加中括号
>>> a
['a', 'b', 'c', '1', '2', '3']
>>> a.extend(['123'])
>>> a
['a', 'b', 'c', '1', '2', '3', '123']
>>> 
9.2.3 插入元素

insert(i,x):在索引 i 处插入元素x

>>> a = [1,2,3]
>>> a.insert(1,0)
>>> a
[1, 0, 2, 3]
9.2.4 替换元素

将索引元素替换

>>> a=[1,2,3]
>>> a[-1]=0
>>> a
[1, 2, 0]
>>> 
9.2.5 删除元素

remove()和pop()
list.remove(x)在列表里从左到右找到第一个x并删除,如果找不到会抛出错误
list.pop(i) 删除索引为 i 的元素,并返回,省略 i 时默认删除最后一个元素

9.2.6 其他常用方法

可以用dir(list)查看其他方法
sort():列表里的元素排序
reverse(): 将列表反过来
copy():复制列表
clear(): 清空列表
count(x): 返回x在列表里出现的次数

9.2.7 列表推导式

很有用的特殊表达式,看大神的代码,好多都是这种,还带嵌套的,让人看晕。

>>> print([x**2 for x in range(10) if x%2 ==0])
[0, 4, 16, 36, 64]
9.3 集合

集合是可迭代的,无序的,元素**不重复 **的数据结构。

9.3.1 创建可变集合

注意,创建空白集合不能 a = {},因为这是创建字典

a = set()
a = {1,2,3}
a = set('aab')   ⇒ 输出的是 {'a','b'}
a = set([1,2,2])  ==> 输出的是{1,2}
9.3.2 修改可变集合

add(x):添加元素 x
remove(x):删除元素 x, 如果不存在则抛错
discard(x):同上,如果不存在不会抛错
pop():这里要注意,如果集合里有字符串,则随机删除并返回,如果都是数字,则默认从第一个开始删除

9.3.3 遍历集合

集合可以用for遍历

9.3.4 不可变集合

用 frozenset(),创建不可变的集合,集合不可修改。不知道在什么情况下应用?

9.3.5 集合推导式

跟列表推导式一样,好处在于由于集合的特性,输出结果不会有重复

9.4 字典

{key:value}

9.4.1 创建字典

使用dict()创建字典时需要注意括号里只能放一个参数

d = {1:'Jack',2:'Tom'}
d=dict({1:'Jack',2:'Tom'})
d=dict([(1,'Jack'),(2,'Tom')])
d=dict(s1='Jack',s2='Tom')	# 用key=value的方式创建,key 只能用字母带头的字符串,'100','s100',100,这样的都不被允许
9.4.2 修改字典
dict[key] = newvalue   # 通过键来改值
del dict[key]		# 删除key和所对应的值
dict.pop(key)	# 删除key和所对应的值并返回其值,省略key默认最后
9.4.3 访问字典
dict.get(key)	# 得到key的值
dict.items()	# 得到所有key,value
dict.keys()		# 得到所有key
dict.values()	# 得到所有值
9.4.4 遍历字典

遍历字典,实际上对dict.keys(),dict.values(),dict.items()来遍历

9.4.5 字典推导式
{k:v for k,v in dict.items() if v%2==0}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值