和字符串相关的常用操作
在Python中,最常用的一类数据类型,莫过于字符串了。在接下来的两小节内容里,我们就来分享和字符串相关的各种最常用的操作。
如何创建一个字符串
我们先来看如何创建字符串。和其他弱若类型脚本语言一样,我们可以用单引号或双引号创建字符串:
stringInDoubleQuotes = "Hello Python!"
stringInSingleQuotes = 'Hello Python!'
或者,如果字符串的内容需要跨过多行,还可以使用“三引号”的形式:
stringInTripleQuotes = '''Hello Python!
This might be a long string
going through multiple lines.
'''
基于这样的用法,如果我们要在字符串中使用双引号,就把它放在单引号包围的字符串里,反之亦然:
stringInDoubleQuotes = "Hello 'Python'!"
stringInSingleQuotes = 'Hello "Python"!'
并且,我们还可以在“三引号”包围的字符串里,使用单引号和双引号:
stringInTripleQuotes = '''Hello 'Python'!
This might be a "long string"
acrossing multiple lines.
'''
除了直接用字面值创建字符串之外,我们还可以用数字类型创建字符串:
aNumber = 123
aString = str(number)
但是,用字符串创建数字类型的操作,却不一定总能成功。例如,下面的代码,就会导致一个运行时错误:
error = int('abc')'''
Traceback (most recent call last):
File "/Users/puretears/Desktop/tmp/aa.py", line 2, in
int('abc')
ValueError: invalid literal for int() with base 10: 'abc'
'''
只有当字符串的字面值真的表示一个数字的时候,转换才可以完成:
oneTwoThree = int("123")
另外,字符串在Python中是只读的。一旦创建完成,就不能像C语言一样用位置去修改了。例如,下面的代码,也会导致编译错误:
aString[0] = 0'''
Traceback (most recent call last):
File "/Users/puretears/Desktop/tmp/aa.py", line 2, in
aString[0] = 0
TypeError: 'str' object does not support item assignment
'''
最后一个关于字符串创建要说明的是,在Python 2和Python 3中,默认使用的字符编码是不同的。Python 2中,使用的是ASCII编码,为了使用unicode编码,需要明确在字符串前面使用小写字母u,像这样:
stringInDoubleQuotes = u"Hello Python!"
虽然,这样的语法在Python 3中也适用,但却没必要这样。因为Python 3的字符串,默认使用的就是unicode编码。
常用的字符串操作 了解了如何创建字符串之后,我们来看一些常用的字符串操作,它们大多都简单易行。
首先,我们可以用加号直接连接两个字符串:
action = "Hello "
name = "Mars!"
welcome = action + name # Hello Mars!
其次,我们可以直接对字符串使用
upper()
和lower()
方法转换字符串的大小写:welcome.upper() # hello mars!
welcome.lower() # HELLO MARS!
第三,我们可以用
stripe()
方法直接去掉字符串的首尾空格:action.strip()
获取API帮助信息 如果我们要查看字符串类型支持的所有方法,可以使用
dir
方法:print(dir(action))'''
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
'''
这样,我们就会得到一个数组,包含了字符串支持的所有操作。如果要查看某个方法的具体帮助,可以使用
help
方法:print(help(action.count))'''
count(...) method of builtins.str instance
S.count(sub[, start[, end]]) -> intReturn the number of non-overlapping occurrences of substring sub in
string S[start:end].Optional arguments start and end are
interpreted as in slice notation.
'''
这样,我们就可以看到方法的签名,以及一个简短的描述信息了。
分割字符串 从上面
count
的描述信息可以看到,它接受一个形如S[start:end]
这样的参数,在Python里,这叫做String slicing。当我们对字符串类型使用[]
操作符的时候,既可以像C一样,使用单个字符的位置读取内容:action[0] # H
也可以使用一个range,截取字符串的一部分:
hello = action[0:5] # Hello
【和字符串相关的常用操作】要说明的是,在Python里,
0:5
这样的写法,是一个半闭半开区间,就如同Swift中的0..<5
一样。因此,hello
的值,是字符串Hello
,而不是Hello
加上一个空格。推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福