关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

python的数据类型:字符串(一)

2020.9.28

之前讲到,字符串的定义就是把一些字符序列用引号引起来。例如:

s = 'abc'

上面这行代码的执行过程:先创建一个字符串对象,并初始化里面字符串的值为'a', 'b', 'c'的序列,再把指针s指向这个对象。如下图所示:

字符串的序列操作

我们知道字符串内部是一个字符序列。作为序列,我们可以用下标来索引。例如:

c = s[0]    # c = 'a'

c = s[1]    # c = 'b'

还可以从字符序列的末尾开始索引,-1代表最后一个字符,-2代表倒数第二个字符,... 例如:

c = s[-1]    # c = 'c'

c = s[-2]    # c = 'b'

另外字符串还支持切片(slice)操作,取出给定两个下标之间的字符序列(包括开始下标的字符,但不包括结束下标的字符。用数学区间的[a:b)来描述是不是更清楚点呢)。例如:

c = s[0:2]    # c = 'ab'

c = s[1:2]    # c = 'b'

c = s[1:-1]    # c = 'b'

这一点很像verilog的位宽操作,例如:reg s[7:0] = 8'h5a,那我们可以c = s[3:0]来取出3到0位的4'ha。只是verilog是闭区间的。

在切片时,当开始下标是0,冒号前的下标可以省略;结束下标指向最后一个元素,冒号后的下标也可省略。所以上面的切片可以简化成:

c = s[:2]    # c = 'ab'

c = s[1:]    # c = 'bc'

当开始下标和结束下标都省略时,s[:]表示整个字符序列'abc'。

注意理解 s[1:-1]和s[1:]的区别,前者不包括最后一个字符,而后者包括。

作为字符序列,还支持拼接和重复操作。例如:

s1 = 'abc'

s2 = s1 + 'def'  # s2 = 'abcdef'

s3 = s1 * 3    # s3 = 'abcabcabc'

另外我们要注意字符序列的只读性。我们不可以对字符赋值,s[0] = 'd'是非法的。但我们可以迂回:

s = 'abc'        

s = 'd' + s[1:]

但要注意,第二句并不是简单的修改s对象的元素值,而是用拼接产生了一个全新对象,并让s指向新的对象。

字符串类型的操作

除了序列操作外,字符串本身作为一种类,自带了很多操作函数(类的方法)。下表列出了一些常用的操作:

index, find

position = index(substr, begin=0, end=len(string))

position = find(substr, begin=0, end=len(string))

描述:index和find函数的作用相同,都是查找子字符串。可以指定开始和结束索引,在一个范围内查找。

返回值:子字符串的起始索引值。index和find的区别是,当没有找到子字符串时,index报错,而find返回-1。

例如:

s = 'abcdefdef'

p1 = s.find('de')   # p1 = 3

p2 = s.index('de', 5)  # p2 = 6

replace

str_new = replace(substr_old, substr_new[, max])

描述:替换函数,如其名,查找子字符串substr_old,替换成substr_new。第三个参数是可选的,指定替换的最大次数,默认是全部替换。

返回值:返回替换后的新字符串。

例如:

s = 'abcdefdef'

s1 = s.place('de', 'gh')   # s1 = 'abchgfhgf'

s2 = s.place('de', 'gh',1)   # s1 = 'abchgfedf'

split

list = split(str=' ',  num)


推荐
热点排行
一周推荐
关闭