一、数字
待补充 136
二、字符串
从严格意义上来说,字符串是由单字符的字符串所组成的序列,其他更一般的序列类型还包括列表和元组。
2.1 序列操作
我们可以通过内置的len
函数验证序列的长度,并通过索引操作得到其各个元素:
s='spam'
print(len(s))
# 4
print(s[0])
# 's'
print(s[-1])
# 'm'
除了简单地从位置进行索引,序列也支持切片(slice)操作,这是一种一步就能够提取整个分片的方法,例如:
print(s[1:3])
#'pa'
切片的一般形式为x[i:j]
,表示“取出在x中偏移量为i,直到但不包含偏移量为j的内容”。结果就是返回一个新的对象。
在切片操作中,左边界默认为0,右边界默认为整个序列的长度,下面介绍了一些常用的变体:
print(s[1:])
# 'pam'
print(s[:3])
# 'spa'
print(s[:-1])
# 'spa'
print(s[:])
# 'spam'
作为一个序列,字符串也支持使用加号进行拼接(将两个字符串合并为一个新的字符串),或者重复(通过再重复一次创建一个新的字符串):
print(s+'xyz')
# 'spamxyz'
print(s*8)
# 'spamspamspamspamspamspamspamspam'
2.2 不可变性
可以看到,在之前的例子中,没有对原始的字符串进行改变,每个字符串操作都被定义为生成新的字符串作为执行结果,这是因为字符串在python中具有不可变性(即在创建后不能原位置——inplace改变)。换句话说,我们永远不能覆盖不可变对象的值。例如,我们不能通过对某一位置进行赋值而改变字符串,但是我们总可以建立一个新的字符串并以同一个变量名对其赋值(Python在运行过程中会清理旧的对象):
s[0]='z'
# TypeError: 'str' object does not support item assignment
s='z'+s[1:]
print(s)
# 'zpam'
python中的每个对象都可以归类为不可变的或者可变的。其中,数字、字符串和元组是不可变的;列表、字典和集合是可变的。
严格来说,我们可以在原位置改变基于文本的数据。这需要我们将它扩展成一个由独立字符构成的列表,然后不加入其他字符把它重新拼接起来。或者使用python2.6以及3.0以后新增的bytearray类型:
s='shrubbery'
l=list(s)
print(l)
# ['s', 'h', 'r', 'u', 'b', 'b', 'e', 'r', 'y']
l[1]='c'
print(''.join(l))
# 'scrubbery'
2.3 特定类型的方法
待补充 140
三、列表
列表是一个任意类型的对象的位置相关的有序集合,它没有固定的大小,与字符串不同,列表是可变的,通过对对应偏移量进行赋值可以定位地对列表进行修改。
3.1 序列操作
我们能够对列表进行索引、切片等操作:
3.2 特定类型的操作
python列表没有固定类型的约数,上面的列表中就包含了三种不同类型的对象(一个整数、一个字符串和一个浮点数)。此外,列表没有固定大小,也就是说能够按照需要增加或减小列表大小,用来响应其特定的操作:
3.3 边界检查
待补充 148