Python基础知识——字符串

论坛 期权论坛 期权     
朴实无华数据科学   2019-6-16 22:09   2299   0
点击蓝字关注我们

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

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

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

本期精彩看点——字符串

字符串类型(str)是编程中最常用的数据类型。字符串就是一系列字符,在Python中经常见用引号括起来的字符串。(包括单引号、双引号/三引号)
  1. '朴实'
复制代码
  1. "无华"
复制代码
  1. '''数据科学'''
复制代码
  1. """一起学!"""
复制代码
注意:引号必须是英文状态下的,中文状态下的引号会报错!另外,三引号可以换行。(单双引号直接换行会报错)




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

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

  1. "Let's go!"
复制代码
  1. '俗话说"英雄所见略同"'
复制代码
法二:利用转义字符\ 。
  1. 'Let\'s go!"
复制代码



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

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



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



字符串方法和函数篇

1大小写转换
  • 方法lower( )、方法upper( )
  1. >>>S='Life is simple, I use Python'
复制代码
  1. >>>S.lower()
复制代码
  1. 'life is simple, i use python'
复制代码
  1. >>>S.upper()
复制代码
  1. 'LIFE IS SIMPLE, I USE PYTHON'
复制代码
返回S字符串的小写、大写格式。(注意,这是新生成的字符串,在另一片内存片段中)
  1. >>> print('ab ABC'.lower())
复制代码
  1. ab abc
复制代码
  1. >>> print('ab CD'.upper())
复制代码
  1. AB CD
复制代码
  • 方法title( ),将每个单词的首字母大写
  1. >>> print('sherlock holmes'.title())
复制代码
  1. Sherlock Holmes
复制代码
2
字串搜索
  • 方法cout( )
  1. S.count(sub[,start[, end]])
复制代码
返回字符串S中子串sub出现的次数,可以指定从哪里开始计算(start)以及计算到哪里结束(end),索引从0开始计算,不包括end边界。
  1. >>> print('brubrubr'.count('br'))
复制代码
  1. 3
复制代码
  1. >>> print('brubrubr'.count('br',1))
复制代码
  1. 2  #index=1,即从‘r’开始查找,查找范围为‘rubrumm’
复制代码
  1. >>> print('brubrubr'.count('br',1,7))
复制代码
  1. 1  #查找范围为‘rubrub’
复制代码
  1. >>> print('brubrubr'.count('br',1,8))
复制代码
  1. 2  #查找范围为‘rubrubr’
复制代码
  • 方法endwith( )、方法startwith( )
  1. S.endswith(suffix[, start[, end]])  
复制代码
  1. S.startswith(prefix[, start[, end]])
复制代码
  1. endswith()
复制代码
检查字符串S是否以suffix结尾,返回布尔值的True和False。suffix可以是一个元组(tuple)。可以指定起始start和结尾end的搜索边界。

同理
  1. startswith()
复制代码
用来判断字符串S是否是以prefix开头。
  1. >>> print('abcdef'.endswith('def'))
复制代码
  1. True  #搜索范围为‘abcdef’
复制代码
  1. >>> print('abcdef'.endswith('def',4))
复制代码
  1. False #搜索范围为‘ef’
复制代码
  1. >>> print('abcdef'.endswith('def',0,5))
复制代码
  1. False #搜索范围为‘abcde’
复制代码
  1. >>> print('abcdef'.endswith('def',0,6))
复制代码
  1. True  #搜索范围为‘abcdef’
复制代码
  • 方法find( )、方法rfind( ) & 方法index( )、方法rindex( )
  1. S.find(sub[, start[, end]])  
复制代码
  1. S.rfind(sub[, start[, end]])
复制代码
  1. S.index(sub[, start[, end]])  
复制代码
  1. S.rindex(sub[, start[, end]])
复制代码
方法find( )搜索字符串S中是否包含子串sub,如果包含,则返回sub的索引位置,否则返回"-1"。可以指定起始start和结束end的搜索位置。

方法index( )和方法find( )一样,唯一不同点在于当找不到子串时,抛出
  1. ValueError
复制代码
错误。
方法rfind( )则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和方法find( )是等价的。

方法rindex( )同理可知。
3
拼接字符串
  • +
Python中利用”+“来合并字符串的方法叫做拼接。
  1. >>> print('abc'+'def')
复制代码
  1. abcdef
复制代码
还记得Python中一个最经典的例子——”hello world“,我们对此做个小拓展,可以输出一个” hello xxxx“的输出。
  1. >>> name='sherlock holmes'
复制代码
  1. >>> print("Hello," + name.title() + "!")
复制代码
  1. Hello,Sherlock Holmes!
复制代码
4
分割
  • 方法split( )、方法rsplit( )、方法splitlines( )
  1. S.split(sep=None, maxsplit=-1)  
复制代码
  1. S.rsplit(sep=None, maxsplit=-1)  
复制代码
  1. S.splitlines([keepends=True])
复制代码
这三个函数用来分割字符串,并生成一个列表。下面我们根据例子来理解一下三个函数的用法。

先来看方法split( )的用法:
  1. >>> 'a,b,c'.split(',')
复制代码
  1. ['a', 'b', 'c']
复制代码
  1. >>> 'a,b,c'.split(',',1)
复制代码
  1. ['a', 'b,c'] #限定分割次数1
复制代码
  1. >>> 'a b c'.split(maxsplit=1)
复制代码
  1. ['a', 'b c']  #maxsplit限定分割次数
复制代码
  1. >>> 'a,b,c'.split()
复制代码
  1. ['a,b,c']
复制代码
  1. >>> 'a b c'.split()
复制代码
  1. ['a', 'b', 'c'] #不指定sep时
复制代码
  1. 方法split()
复制代码
根据sep对S进行分割,maxsplit用于指定分割次数,如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符。
  1. 方法rsplit( )
复制代码
和方法
  1. split()
复制代码
是一样的,只不过是从右边向左边搜索。

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

  1. >>> ''.split('\n')
复制代码
  1. ['']
复制代码
  1. >>> ''.splitlines()
复制代码
  1. []
复制代码
  1. >>> 'OH MY GOD\n'.split('\n')
复制代码
  1. ['OH MY GOD', '']
复制代码
  1. >>> 'OH MY GOD\n'.splitlines()
复制代码
  1. ['OH MY GOD']
复制代码
5
添加空白
  • \n 换行符
  1. >>> print("Films:\nX-Men\nWonder\nMarvel's The Avengers")
复制代码
  1. Films:
复制代码
  1. X-Men
复制代码
  1. Wonder
复制代码
  1. Marvel's The Avengers
复制代码
  • \n\t 换行符和制表符
  1. >>> print("Films:\n\tX-Men\n\tWonder\n\tMarvel's The Avengers")
复制代码
  1. Films:
复制代码
  1.   X-Men
复制代码
  1.   Wonder
复制代码
  1.   Marvel's The Avengers
复制代码
6
修剪  
  • 方法strip( )、方法lstrip( )、方法rstrip( )
  1. S.strip([chars])  #移除左右两边的字符chars,默认移除空白(空格、制表符、换行符)。
复制代码
  1. S.lstrip([chars])  #移除左边
复制代码
  1. S.rstrip([chars])  #移除右边
复制代码
下面来看一下具体的例子:
  1. >>> '   sherlock holmes   '.lstrip()
复制代码
  1. 'sherlock holmes   '
复制代码
  1. >>> '   sherlock holmes   '.rstrip()
复制代码
  1. '   sherlock holmes'
复制代码
  1. >>> '   sherlock holmes   '.strip()
复制代码
  1. 'sherlock holmes'
复制代码
  1. [/code][code]>>> 'sherlock holmes'.lstrip('s')
复制代码
  1. 'herlock holmes'
复制代码
  1. >>> 'sherlock holmes'.rstrip('s')
复制代码
  1. 'sherlock holme'
复制代码
  1. >>> 'sherlock holmes'.strip('s')
复制代码
  1. 'herlock holme'
复制代码
另外,chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。
  1. >>> print('www.example.com'.lstrip('cmowz.'))
复制代码
  1. example.com
复制代码
  1. >>> print('wwwz.example.com'.lstrip('cmowz.'))
复制代码
  1. example.com
复制代码
  1. >>> print('wwaw.example.com'.lstrip('cmowz.'))
复制代码
  1. aw.example.com
复制代码
  1. >>> print('www.example.com'.strip('cmowz.'))
复制代码
  1. example
复制代码
由于
  1. www.example.com
复制代码
的前4个字符都是字符序列
  1. cmowz.
复制代码
中的字符,所以都被移除,而第五个字符e不在字符序列中,所以修剪到此结束。同理
  1. wwwz.example.com
复制代码
  1. wwaw.example.com
复制代码
中第3个字符a不是字符序列中的字符,所以修剪到此结束。

字符串的转化

type( )函数查看数据类型
  1. >>> type(int('114525'))#字符串转化为整数
复制代码
  1. [/code][code]>>> type(float('3.0'))#字符串转化为浮点数
复制代码
  1. [/code][code]>>> type(eval("[1,2,[3,4,[5,6],7],8]"))#字符串转化为列表
复制代码
  1. [/code][code]>>> type(eval("{'a':'hi','b':'there'}"))#字符串转化为字典
复制代码
  1. [/code]
  2. 字符串格式化
  3. 本文将介绍两种字符串格式化的方法,format( )函数和f-strings。
  4. 从 Python 2.6开始,新增了一种格式化字符串的函数[code]str.format()
复制代码
,基本语法是通过
  1. {}
复制代码
  1. :
复制代码
来代替以前的
  1. %
复制代码
。format函数支持通过位置、关键字、对象属性和下标等多种方式使用,不仅参数可以不按顺序,也可以不用参数或者一个参数使用多次。并且可以通过对要转换为字符串的对象的
  1. __format __
复制代码
方法进行扩展。
  1. '{1} {0}'.format('abc', 123)  # 可以不按顺序进行位置映射,输出'123 abc'
复制代码
  1. [/code][code]'{} {}'.format('abc', 123)  # 可以不指定参数名称,输出'abc 123'
复制代码
  1. [/code][code]'{1} {0} {1}'.format('abc', 123)  # 参数可以使用多次,输出'123 abc 123'
复制代码
  1. [/code][code]'{name} {age}'.format(name='tom', age=27)  # 可以按关键字映射,输出'tom 27'
复制代码
  1. [/code][code]'{person.name} {person.age}'.format(person=person)  # 可以按对象属性映射,输出'tom 27'
复制代码
  1. [/code][code]'{0[1]} {0[0]}'.format(lst)  # 通过下标映射
复制代码
另外,在复杂格式控制方面,format函数也提供了更加强大的控制方式:
  1. '{:S^+#016,.2f}'.format(1234)  # 输出'SSS+1,234.00SSSS'
复制代码
具体控制参数的含义可参见下表:




Life is simple, I use Python.

即日起,关注我们,
     无论起步何处,都是Python学习者。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP