Python--字符串

发布时间:2017-09-12 15:27:25
Python--字符串

字符串类型在Python中是十分重要的类型,他一般用引号中间添加字符的形式表达,不同于其他语言的是,Python中双引号(” “)与单引号(’ ‘)是不予区分的。

创建、赋值和访问 1. 两种创建方式

(1) 直接赋值

s = "abcdef"

(2) 通过str()函数

str()函数的作用,相当于是通过传入的参数,生成一个string型的对象,这个传入的参数可能是整型,浮点型,也能是列表,元组,字典等。

s = str(21) # >>> "21" s = str(12.3) # >>> "12.3" s = str([1, 2, 3]) # >>> "[1, 2, 3]"

需要注意的是,“传入的是什么,得到的就是什么”比如我们传一个列表进去的话,得到的字符串的第一个字符可不是列表的第一个元素,而是"[",同理 , 也被看做是字符串的一部分

2. 访问字符串

(1) 访问单个字符

s = "1234567" print(s[1]) # >>> "2" print(s[-1]) # >>> "7" print(s[-7]) # >>> "1"

字符串当然也是序列,所以也满足每一个元素(也就是其中的每一个字符)都对应一个索引,索引的设计与其他语言一样,从0开始。

此外,Python还提供了“负索引”,就是令最后一个元素的索引为-1,倒数第二个元素的索引为-2,以此类推,第一个元素的索引就是-n(其中,n为序列的长度)

(2) 访问切片

s = "1234567" print(s[1:4]) # >>> "234"

切片是Python中非常有特色的语法,当然,切片应用的对象是序列(字符串,列表,元组),他可以用来非常方便的表示序列的一部分。切片有3个参数控制,他的形式可以如下表示:

[begin: end: step]

中间由 : 隔开,begin 表示要得到的序列的起始位置,并且包含这个位置,而 end 则表示要得到序列的结束位置,但是不能包含这个位置的元素。例如:

s = "1234567" s1 = s[2:5] # >>> 取的是s中第2个位置开始,一直到第4个位置的数,也就是"345"

如果我们不明确给出begin和end的相应参数,那么,begin会默认为0,end会默认为n(序列长度),比如:

s = "1234567" s1 = s[:5] # >>> s1 = "12345" s2 = s[2:] # >>> s2 = "34567" s3 = s[:] # >>> 复制了整个s

而切片的最后一个参数step则表示“步长”,比如:

s = "1234567" s1 = s[1:6:2] # >>> 从第1个位置开始,直到第5个位置结束,每次“跳”2步,得到"246"

可以理解为,每取一个元素后,向后“跳”的步数为step,比如上面的例子就是跳了2步。但是step这个参数不是一定要给出的,他默认值为1,而且当使用默认值1时,step之前的那个 : 如果没有特殊的需求,也是可以省略不写的。

(3) 负切片

有一种比较特殊的切片使用方式,那就是“负切片”,通俗地讲,就是令step为负数的切片,既然我们上面已经说过Python提供“负索引”,那么根据相同的道理,负切片自然就是从后开始,每次向前跳相应的步数,比如:

s = "1234567" print(s[6:1:-1]) # >>> 依次取6,5,4,3,2位置的元素, 结果是"76543" print(s[-2:-4:-1]) # >>> 依次取-2,-3位置的元素,结果是"65"

不论是正切片,还是负切片,begin 和 end 都满足“左闭右开”的原则。只不过正切片是从左往右(或者叫从前往后),而负切片是相反的方向。

与正切片同理,step的取值当然也可以不是-1,也可以取别的负整数。

s = "1234567" print(s[6:1:-2]) # >>> 依次取6,4,2位置的元素, 结果是"753"

需要注意的是,不论正负切片,要是begin或者end超出了序列的范围,是不会引发异常的。

a = "1234" print(a[8:]) # >>> "" print(a[0:8]) # >>> "1234"

如果出现正切片中 begin > end 且begin 与 end 同号,或者负切片中 begin < end 且begin 与 end 同号的情况,一样返回空序列。

a = "1234567" print(a[3:1:1]) # >>> "" print(a[1:3:-1]) # >>> ""

但是如果begin 与 end 异号,则会先将负索引转换成相应的正索引,再实施切片。

a = "1234567" print(a[-2:0:-1]) # >>> 转换成 a[5:0:-1] print(a[2:-1]) # >>> 转换成 a[2:6] 不可变性

我之前说过,像整型,字符串等等,这些类型的数据是不可变的(详见我的博文:Python–内存管理),也就是说,一旦给这些类型的数据分配了内存,那么就不可更改了。比如,执行以下的操作会引发异常:

s = "1234567" s[0] = "e"

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:湖北网站制作 http://hubei.666rj.com