python rfind函数用法_Python基础字符串

1f43041b81cecfff530ed1fce4e822c0.png

号外号外!!

根据最新出炉的PYPL6月报告,“通过半年的发展,Python基本已奠定2019-2010年的地位,持续称王就对了!”(CSDN)

看过上期推文的朋友一定会想起来Python最具杀伤力的武器——简洁有效!

贤者曾言:Life is simple, I use Python!

本期精彩看点——字符串

字符串类型(str)是编程中最常用的数据类型。字符串就是一系列字符,在Python中经常见用引号括起来的字符串。(包括单引号、双引号/三引号)

'朴实'"无华"'''数据科学'''"""一起学!"""
注意: 引号必须是英文状态下的,中文状态下的引号会报错!

另外,三引号可以换行。(单双引号直接换行会报错)

cb247a61c041c68aa1692e1ea12bca58.png

那么问题来了,如果字符串内容中包含引号,怎么正确输入呢?

法一:用其他类型的引号,避免出现歧义;

"Let's go!"'俗话说"英雄所见略同"'

法二:利用转义字符\ 。

'Let\'s go!"

adb96f5950ef5363760295bf9c0a4361.png

通过转义字符\加上想表达的引号,程序也可以准确输出。但这个写法容易出错,小编还是更推荐法一。

说到转义字符,我们先来补充一下常用的四个转义字符。

984f524fbf8800bca0fb36e2bdb3b43c.png

(本文稍后会涉及部分转移符号的运用)

b8992c5480c8161813549225da3bd185.png

字符串方法和函数篇

1

大小写转换

  • 方法lower( )、方法upper( )

>>>S='Life is simple, I use Python'>>>S.lower()'life is simple, i use python'>>>S.upper()'LIFE IS SIMPLE, I USE PYTHON'

返回S字符串的小写、大写格式。(注意,这是新生成的字符串,在另一片内存片段中)

>>> print('ab ABC'.lower())ab abc>>> print('ab CD'.upper())AB CD
  • 方法title( ),将每个单词的首字母大写

>>> print('sherlock holmes'.title())Sherlock Holmes

2

字串搜索

  • 方法cout( )

S.count(sub[,start[, end]])

返回字符串S中子串sub出现的次数,可以指定从哪里开始计算(start)以及计算到哪里结束(end),索引从0开始计算,不包括end边界。

>>> print('brubrubr'.count('br'))3>>> print('brubrubr'.count('br',1))2  #index=1,即从‘r’开始查找,查找范围为‘rubrumm’>>> print('brubrubr'.count('br',1,7))1  #查找范围为‘rubrub’>>> print('brubrubr'.count('br',1,8))2  #查找范围为‘rubrubr’
  • 方法endwith( )、方法startwith( )

S.endswith(suffix[, start[, end]])  S.startswith(prefix[, start[, end]])

endswith() 检查字符串S是否以suffix结尾,返回布尔值的True和False。suffix可以是一个元组(tuple)。可以指定起始start和结尾end的搜索边界。

同理 startswith() 用来判断字符串S是否是以prefix开头。

>>> print('abcdef'.endswith('def'))True  #搜索范围为‘abcdef’>>> print('abcdef'.endswith('def',4))False #搜索范围为‘ef’>>> print('abcdef'.endswith('def',0,5))False #搜索范围为‘abcde’>>> print('abcdef'.endswith('def',0,6))True  #搜索范围为‘abcdef’
  • 方法find( )、方法rfind( ) & 方法index( )、方法rindex( )

S.find(sub[, start[, end]])  S.rfind(sub[, start[, end]])S.index(sub[, start[, end]])  S.rindex(sub[, start[, end]])

方法find( )搜索字符串S中是否包含子串sub,如果包含,则返回sub的索引位置,否则返回"-1"。可以指定起始start和结束end的搜索位置。

方法index( )和方法find( )一样,唯一不同点在于当找不到子串时,抛出 ValueError 错误。

方法rfind( )则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和方法find( )是等价的。

方法rindex( )同理可知。

3

拼接字符串

  • +

Python中利用”+“来合并字符串的方法叫做拼接。

>>> print('abc'+'def')abcdef

还记得Python中一个最经典的例子——”hello world“,我们对此做个小拓展,可以输出一个” hello xxxx“的输出。

>>> name='sherlock holmes'>>> print("Hello," + name.title() + "!")Hello,Sherlock Holmes!

4

分割

  • 方法split( )、方法rsplit( )、方法splitlines( )

S.split(sep=None, maxsplit=-1)  S.rsplit(sep=None, maxsplit=-1)  S.splitlines([keepends=True])

这三个函数用来分割字符串,并生成一个列表。下面我们根据例子来理解一下三个函数的用法。

先来看方法split( )的用法:

>>> 'a,b,c'.split(',')['a', 'b', 'c']>>> 'a,b,c'.split(',',1)['a', 'b,c'] #限定分割次数1>>> 'a b c'.split(maxsplit=1)['a', 'b c']  #maxsplit限定分割次数>>> 'a,b,c'.split()['a,b,c'] >>> 'a b c'.split()['a', 'b', 'c'] #不指定sep时

方法split() 根据sep对S进行分割,maxsplit用于指定分割次数,如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符。

方法rsplit( )和方法split()是一样的,只不过是从右边向左边搜索。

下面来看看方法splitlines( ),它是用来专门用来分割换行符。

>>> ''.split('\n')['']>>> ''.splitlines()[]>>> 'OH MY GOD\n'.split('\n')['OH MY GOD', '']>>> 'OH MY GOD\n'.splitlines()['OH MY GOD']

5

添加空白

  • \n 换行符

>>> print("Films:\nX-Men\nWonder\nMarvel's The Avengers")Films:X-MenWonderMarvel's The Avengers
  • \n\t 换行符和制表符

>>> print("Films:\n\tX-Men\n\tWonder\n\tMarvel's The Avengers")Films:  X-Men  Wonder  Marvel's The Avengers

6

修剪  

  • 方法strip( )、方法lstrip( )、方法rstrip( )

S.strip([chars])  #移除左右两边的字符chars,默认移除空白(空格、制表符、换行符)。S.lstrip([chars])  #移除左边S.rstrip([chars])  #移除右边
下面来看一下具体的例子:
>>> '   sherlock holmes   '.lstrip()'sherlock holmes   '>>> '   sherlock holmes   '.rstrip()'   sherlock holmes'>>> '   sherlock holmes   '.strip()'sherlock holmes'>>> 'sherlock holmes'.lstrip('s')'herlock holmes'>>> 'sherlock holmes'.rstrip('s')'sherlock holme'>>> 'sherlock holmes'.strip('s')'herlock holme'
另外, chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。
>>> print('www.example.com'.lstrip('cmowz.')) example.com >>> print('wwwz.example.com'.lstrip('cmowz.')) example.com >>> print('wwaw.example.com'.lstrip('cmowz.')) aw.example.com >>> print('www.example.com'.strip('cmowz.')) example

由于 www.example.com 的前4个字符都是字符序列 cmowz. 中的字符,所以都被移除,而第五个字符e不在字符序列中,所以修剪到此结束。同理 wwwz.example.com ;wwaw.example.com 中第3个字符a不是字符序列中的字符,所以修剪到此结束。

字符串的转化

type( )函数查看数据类型

>>> type(int('114525'))#字符串转化为整数<class 'int'>>>> type(float('3.0'))#字符串转化为浮点数<class 'float'>>>> type(eval("[1,2,[3,4,[5,6],7],8]"))#字符串转化为列表<class 'list'>>>> type(eval("{'a':'hi','b':'there'}"))#字符串转化为字典<class 'dict'>

字符串格式化

本文将介绍两种字符串格式化的方法,format( )函数和f-strings。

从 Python 2.6开始,新增了一种格式化字符串的函数str.format(),基本语法是通过{}:来代替以前的%。format函数支持通过位置、关键字、对象属性和下标等多种方式使用,不仅参数可以不按顺序,也可以不用参数或者一个参数使用多次。并且可以通过对要转换为字符串的对象的__format __方法进行扩展。

'{1} {0}'.format('abc', 123)  # 可以不按顺序进行位置映射,输出'123 abc''{} {}'.format('abc', 123)  # 可以不指定参数名称,输出'abc 123''{1} {0} {1}'.format('abc', 123)  # 参数可以使用多次,输出'123 abc 123''{name} {age}'.format(name='tom', age=27)  # 可以按关键字映射,输出'tom 27''{person.name} {person.age}'.format(person=person)  # 可以按对象属性映射,输出'tom 27''{0[1]} {0[0]}'.format(lst)  # 通过下标映射

另外,在复杂格式控制方面,format函数也提供了更加强大的控制方式:

'{:S^+#016,.2f}'.format(1234)  # 输出'SSS+1,234.00SSSS'

具体控制参数的含义可参见下表:

6613845b63b2ce28e9b62872ae88b0a4.png

ca737e39ad0eb963fe54570c1caf6642.png

Life is simple, I use Python.

即日起,关注我们,

     无论起步何处,都是Python学习者。

150f8a461eab98bbfc7c8101a2eafebf.png