原文链接:http://www.juzicode.com/archives/182
用过C语言的人在接触到Python中强大易用的字符串类型后,都会有一种相见恨晚的感觉,用好了str类型,对Python的理解会有更深刻的认识。
1 定义字符串
首先我们来看下在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’>>>> |
2 计算字符串长度
使用len ()计算字符串长度,括号内输入该字符串变量名称:
>>> >>> a = ‘I am juzicode’ >>> len(a) 13 >>> d=’我是桔子code’ >>> len(d) 8 >>> |
3 字符串拼接
使用“+”进行拼接:
>>> a = ‘I am juzicode’ >>> d = ‘我是桔子code’ >>> print(a+d) I am juzicode我是桔子code >>> |
4 字符串的切片
切片用于提取字符串中的一部分,使用方法是用中括号包含冒号分隔的起始和结束位置: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’ >>> |
5 字符串是否包含子串
如果是检查子串是否在字符串中,使用“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 字符串中 |
6 子串在字符串中的位置
使用字符串的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 |
7 字符串的大小写转换
使用函数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 |