Python基础教程2b–数据类型-string(字符串)

原文链接:http://www.juzicode.com/archives/182

用过C语言的人在接触到Python中强大易用的字符串类型后,都会有一种相见恨晚的感觉,用好了str类型,对Python的理解会有更深刻的认识。

定义字符串

首先我们来看下在Python中字符串是如何定义的:

变量名 = ‘内容’ 或者 变量名 = “内容”
a = ‘I am juzicode’
a = “I am juzicode”

上面的例子就是定义了一个名叫a的字符串,其内容为I am juzicode,两边用单引号或者双引号包含,需要注意的是两边的引号类型必须是一样的,另外这里的单引号和双引号都必须是英文字符,进入cmd命令行运行python执行该定义并打印出来:

>>> a = ‘I am juzicode’   #定义
>>> print(a)            #打印
I am juzicode
>>> print(type(a))      #打印类型
<class ‘str’>           #在pythoon中的类型名称是‘str’>>>

定义一个空字符串的方法1,单引号内没有任何字符:

>>> b = ”           #定义一个空字符串
>>> print(b)                  
#空字符串打印看不到任何东西
>>> print(type(b))
<class ‘str’>>>>

定义一个空字符串的方法2,用str()定义:

>>> c = str()  #定义一个空字符串
>>> print(c) 
>>> print(type(c))
<class ‘str’>>>>

计算字符串长度

使用len ()计算字符串长度,括号内输入该字符串变量名称:

>>>
>>> a = ‘I am juzicode’
>>> len(a)
13
>>> d=’我是桔子code’
>>> len(d)
8
>>>

字符串拼接

使用“+”进行拼接:

>>> a = ‘I am juzicode’
>>> d = ‘我是桔子code’
>>> print(a+d)
I am juzicode我是桔子code
>>>

字符串的切片

切片用于提取字符串中的一部分,使用方法是用中括号包含冒号分隔的起始和结束位置:n=a[起始位置:结束位置+1],结束位置也可以用起始位置加上要提取的字符长度来表示:n=a[起始位置:起始位置+提取长度]。其中起始位置是从0开始编号的,比如a = ‘I am juzicode’这个字符串,大写字母I所在的位置就是0号位置,I后面的空格编号为1,a编号为2,依次类推。如果想提取juzi这个单词,字母j所在的位置为5,i所在位置为8,新的字符串就用a[5:8+1]表示,或者用juzi长度为4计算,新字符串就是a[5:5+4]。

>>> a = ‘I am juzicode’
>>> a[5:8+1]  #[起始位置:结束位置+1]
‘juzi’
>>> a[5:5+4]  #[起始位置:起始位置+提取长度]
‘juzi’
>>>

通常切片时可能只需要使用前面一部分或者后面一部分,这种情况下就可以只指定单侧位置:n=a[:结束位置+1],n就是从字符串开始(0)到结束位置的新字符串,如果n=a[开始位置:],n就是从开始位置到字符串尾的新字符串;

>>> a = ‘I am juzicode’
>>> a[5:]
‘juzicode’
>>> a[:5]
‘I am ‘
>>>

如果只提取单个字符,可以不使用冒号的方法指定起始和结束位置,而是只使用单个下标就能表示:

>>> a = ‘I am juzicode’
>>> a[5]  #单下标表示方法
‘j’
>>> a[5:6]
‘j’
>>> a[5:5]

>>>

注意看上面这个例子,最后的a[5:5]表示提取从第5个位置开始,到第5-1个位置结束,所以提取到的是一个空字符。

在提取字符时通常可能需要提取倒数第几个位置开始的字符串,当然可以使用len()计算出字符串的长度,起始位置用该长度减倒数开始的位置,但是这种方式在python中显得不那么“优雅”,提供了一种使用负数值表示位置的方法,在一个字符串中,-1的位置表示的就是倒数第1个字符所在的位置,在’I am juzicode’这个字符串中,a[-1]表示的就是最后的字母e。如果要提取出最后4个字符,就可以使用a[-4:]表示:

>>> a = ‘I am juzicode’
>>> a[len(a)-4:]   #先计算字符串长度,该长度减去
‘code’
>>> a[-4:]   #使用负值表示倒数位置
‘code’
>>>

字符串是否包含子串

如果是检查子串是否在字符串中,使用“in”来进行判断,比如判断juzi和JUZI是否在‘juzicode.com’中,可以使用如下的方法进行判断(关于if语句后面教程会详细介绍):

源码print(‘\n字符串是否包含子串:’)
e=’juzicode.com’
if ‘juzi’ in e:
print(‘juzi在’,e,’字符串中’)
else:
print(‘juzi不在’,e,’字符串中’)
if ‘JUZI’ in e:
print(‘JUZI在’,e,’字符串中’)
else:
print(‘JUZI不在’,e,’字符串中’)
结果字符串是否包含子串:
juzi在 juzicode.com 字符串中
JUZI不在 juzicode.com 字符串中 

子串在字符串中的位置

使用字符串的find()函数可以查找到子串是否在字符串中,如果在该字符串中,返回子串的起始位置,该位置值是一个不小于0的数值,如果不在该字符串中则会返回-1。前一节提到的查找子串是否在字符串中,也可以用该方法进行判断,如果返回为-1则表示子串不在字符串中,如果返回为不小于0的数值,则表示在字符串中:

源码print(‘\n查找子串位置:’)
e=’juzicode.com’
pos = e.find(‘code’)
print(‘code子串的起始位置:’,pos)
pos = e.find(‘CODE’)
print(‘CODE子串的起始位置:’,pos)
结果查找子串位置:code子串的起始位置: 4
CODE子串的起始位置: -1 

字符串的大小写转换

使用函数upper()可以将字符串中的所有小写字母转换为大写,lower()函数则将字符串中的大写字母全部转换为小写.

源码print(‘\n大小写变换:’)
e=’juzicode.com’
u = e.upper()
print(‘转换为大写:’,u)
l = e.lower()
print(‘转换回小写:’,l)
结果大小写变换:
转换为大写: JUZICODE.COM
转换回小写: juzicode.com

8  是否以某个子串开始或者结束

使用startswith()判断字符串是否以某个子串开始,如果是返回True,否则返回False;

使用endswith()判断字符串是否以某个子串结束,如果是返回True,否则返回False。

源码 print(‘\n是否以某个子串开始:’)
a = ‘juzicode.com’
print(‘a:’,a)
start = ‘juzi’
end = ‘code’
print(‘是否以juzi开始:’,a.startswith(start))
print(‘是否以code结尾:’,a.endswith(end)) 
结果是否以某个子串开始:
a: juzicode.com
是否以juzi开始: True
是否以code结尾: False

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注