序列(列表和元组)
2.2 通用序列操作
1)索引
从左到右计数(第一个)为0,从右到左计数(最后一个)-1.
字符串可以直接使用索引:"hello"[2]
2)分片
提供两个边界作为索引,第一个边界包括,第二个边界不包括。
numbers = {1,2,3,4,5,6,7,8,9,10}
优雅捷径:
numbers[-3:-1] [8,9]
numbers[-3:0] [] 左边索引必须比右边索引早出现才不是空集
numbers[-3:] 不填边界表示到最边界处
numbers[:] 整个列表
步长:
默认步长是1,如果不是1,需要指定
numbers[m:n:k] 指定步长为k
步长不能为0,但步长可以为负数,为负数时,列表的左右边界应该是从右到左的。
3)序列相加:
[1,2,3] + ["hello"] [1, 2, 3, 'hello']
但列表和字符串不能相加
4)乘法:
“python” * 2 “pythonpython”
[42] * 3 [42,42,42]
None 空列表 初始化
5)成员资格:in
返回布尔值:某个对象是否为一个序列的成员
6)长度
内建函数len,max,min
-----------------------------------------------------------------------------
2.3 列表:
1.list函数
将字符串或其他系列转换成列表
由于字符串不可变,转换成列表后可以改变:
list("hello") ['h','e','l','l','o']
ps:用 ''.join(somelist)可以将一个列表somelist转换成字符串
2.列表基本操作
1)改变列表:元素赋值
不能为一个不存在的索引位置赋值
2)删除元素
del names[2]
删除后列表长度自动缩减,顺序保持
3)分片赋值
一次为多个元素赋值
a 注意在普通赋值时,不存在的索引处不能赋值,但是分片赋值却可以实现使用与原分片不等长的序列将分片替换:
name = list('perl')
name[1:] = list('ython')
b 替换一个空分片的分片赋值可以实现插入一个序列
c 同理,给一个分片赋值一个空的分片可以用来删除这个分片
3.列表方法
1)append
lst.append(xxx):注意没有返回值!
2)count
统计某个元素在列表中出现的次数:lst.count(xxx)
3)extend
在一个序列的末尾追加另一个序列中的多个值
a.extend(b) 将b追加到a后面了,a此时改变了
4)index
names.index('jmz')
找到列表中第一个匹配项的索引,找不到会引发异常
5)insert
names.insert(5,'jmz')
将‘jmz’这个名字插入为索引5位置处
6)pop
lst.pop() 移除最后一个元素并返回这个移除的元素
pop方法是唯一一个既能修改列表又能返回元素的方法,注意以上方法中修改列表的方法均不返回值。
7)remove
names.remove('jmz') 删除第一个匹配的项目
8)reverse
names.reverse() 将列表元素倒序存放
9)sort
注意也是没有返回值
x.sort() x变得有序,但这个表达式并不返回值
y = x.sort并不能将x的有序形式赋值给y
可以这样:
y = x[:]
y.sort()
或者:
y = sorted(x)
来实现一样的功能
10)高级排序
cmp参数来指定自己的排序方式:numbers.sort(cmp)
定义你自己的cmp函数,小于时返回负数,大于时返回正数,相等时返回0
key参数指定排序键:names.sort(key = len) 按照长度
reverse参数指定是否反向排序:number.sort(reverse = true)
-----------------------------------------------------------------------------
2.4 元组学习:不可变序列
如果你用逗号隔开一些值,那么就自动创建了元组
1)tuple函数
将字符串,序列转换为元组,如果被转换的本身就是元组,则原样返回。
tuple([1,2,3]) (1,2,3)
tuple('hello') ('h','e','l','l','l','o')
tuple((1,2,3)) (1,2,3)
-----------------------------------------------------------------------------
总结:
列表:[] 可变序列
元组:() 不可变序列
一些方法