Python 序列和元祖
序列
序列(可以理解为容器)是一种数据结构,其中的元素带编号(从 0 开始)。列表、字符串和元组都属于序列,其中列表是
可变的
,元组和字符串是不可变
的要访问序列的一部分,可使用切片操作:提供两个指定切片起始和结束位置的索引。要修改列表,可给其元素赋值,也可使用赋值语句给切片赋值
通用的序列操作
索引(indexing)
序列中的所有元素都有编号,从 0 开始递增,可以通过编号(索引)来获取元素。当使用负数
索引时,Python 将从右(从最后一个元素)开始往左数
# 以字符串为例
foo = 'bar'
foo[0] == 'b'
foo[-1] == 'r'
切片(slicing)
索引用来访问单个元素,切片用来访问特定范围
内的元素,使用两个索引,用冒号分隔。第一个索引包含第一个元素的编号,第二个索引是切片后余下的第一个元素的编号。简言之,第一个索引指定的元素包含在切片内,第二个索引指定的元素不包海在切片内
简写
省略第一个索引,表示 0
省略第二个索引,表示序列长度
同时省略两个索引,表示复制该序列
# 以字符串为例
hello = 'codelesser'
hello[:4] == 'code'
hello[4:8] == 'less'
hello[:] == 'codelesser'
步长
切片可以是指定步长,当然步长也可以为负数
# 以字符串为例
hello = 'codelesser'
hello[::2] == 'cdlse
hello[::-2] == 'rseeo'
相加
可以运用加法来拼接序列。但是不能拼接不同类型的序列
# 以字符串为例
foo = 'code'
bar = 'lesser'
foo + bar == 'codelesser'
乘法
将序列与数相乘时,将重复这个序列 x 来创建一个新序列
# 以字符串为例
foo = 'code'
foo * 3 == 'codecodecode'
成员资格
用运算符in
来检查特定的值是否包含在序列中。满足返回 True,反之 False
# 以字符串为例
foo = 'codelesser'
('code' in foo) == True
迭代(iteration)
对序列迭代意味着对其每个元素都执行特定的操作
# 以字符串为例
for x in 'codelesser':
print(x)
列表
列表是可变的,可以修改其内容
list 函数
某些情况下使用字符串来创建列表很有用,可以使用 list 函数
somelist = list('Hello')
# print(a)
# 输出 ['H', 'e', 'l', 'l', 'o']
’’.join(somelist) 将列表转换为字符串
somelist = ['H', 'e', 'l', 'l', 'o']
s = ''.join(somelist)
# print(s)
# 输出 'Hello'
基本操作
- 修改列表:给元素赋值
foo = ['code', 'lesser']
foo[1] = 'more'
print(foo)
# 输出 ['code', 'more']
- 删除元素
del somelist[x]
foo = ['code', 'lesser']
del foo[1]
print(foo)
# 输出 foo = ['code'']
- 给切片赋值
通过切片赋值,可将切片替换为长度与其不同的序列
使用切片赋值,可以不替换原有元素的情况下插入新元素
通过替换为一个空切片来达到删除该切片的目的
列表方法
-
append: 就地将一个对象附加到列表末尾
-
clear:就地清空列表内容
-
copy:复制列表
-
count:计算指定的元素在列表中出现的次数
-
extend:就地同时将多个值附加到列表末尾,可以将这些值组成的序列作为参数提供给方法 extend
-
index:在列表中查找指定值第一次出现的索引
-
insert:将一个对象插入列表
-
pop:从列表中删除一个元素,
并返回这一元素
可以通过 pop 和 insert 或 append 能够模拟 Stack。使用模块 collections 中的 deque 是更佳的解决方案
-
remove:就地删除第一个为指定值的元素
-
reverse:按相反的的顺序排列列表中的元素
-
sort:就地对列表进行排序
-
sorted:返回排序后的新列表
高级排序
sort 和 sorted 方法接收两个参数:key 和 reverse。默认 key 为字典序
foo = ['code', 'lesser']
foo.sort()
foo.sorted(reverse=True)
# 使用 key 为列表项的长度来进行排序
foo.sort(key=lambda x: len(x))
foo.sort(key=lambda x: len(x), reverse=True)
sorted(foo)
sorted(foo, reverse=True)
# 使用 key 为列表项的长度来进行排序
sorted(foo, key=lambda x: len(x))
sorted(foo, key=lambda x: len(x), reverse=True)
元组
元组是不可修改的,就是不可变的,元组的切片也是元组
元祖的使用和列表相同,这里就不再赘述了
创建单个值的元组,后面得加上逗号
t = 47,
print(t)
# 输出 (47,)