-
Python第五章-内置数据结构01-字符串
到目前为止,我们如果想保存一些数据,只能通过变量。但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实。
我们需要能够保存大量数据的类似变量的东东,这种东东就是数据结构(Data Structures)。
数据结构,它们只是一种结构,能够将一些数据聚合在一起的结构。换句话说,它们是用来存储一系列相关数据的集合。
python 提供了 4 种内置数据结构:List
(列表)、Tuple
(元组)、Dictionary
(字典)、Set
(集合)
严格来说,字符串也是一种数据结构,因为他把字符组织在了一起。
所以,本章先从字符串开始讲起。
|
字符串就是一串字符,是编程语言中表示文本的数据类型
在Python中可以使用 一对双引号或者一对单引号定义一个字符串
虽然可以使用
\"
或\'
做字符串的转移,但是实际开发中
- 如果字符串内容需要使用
"
,可以使用'
定义字符串- 如果字符串内容需要使用
'
,可以使用"
定义字符串
在前面的学习中我们已接近了解了什么是字符串,字符串的连接,输出等。下面我们开始学习字符串更高级的功能。
+
用来连接两个字符串
*
用来重复字符串
上面两个操作符可以都可以操作变量。
如果两个或多个字符串字面量写在一起,则他们会自动的连接在一起。
注意:
- 只都是字符串字面量才可以通过这种方法连接,变量不能参与
- 字符串之间不要添加任何标点符号
- 如果想要打破比较长的字符串,这种方式尤其有用。
字符串的长度,就是指的字符串中字符的个数。使用内置函数 len()
来获取字符串长度。 len()
可以获取任何序列的长度,后面我们会了解更多。
字符串中的每个字符都有一个编号,这个编号在编程语言中一般称之为索引(index
、下标)。可以通过索引单独去访问字符串中的每个字符。
另外,由于 python
中没有字符类型,所以即使拿到的是单个字符也是字符串类型的。
index
是从 0
开始,最后一个字符的索引:字符串长度 - 1
索引也可以是负值,表示从右开始计算。-1
就是最后一个元素的索引。 -0
和 0
是一样的。
如果 index
超出了范围,则会抛出异常。所以使用的时候一定要小心,防止下标越界。
使用 index
只能获取单个的字符。而字符串的切片操作可以获取子字符串。
python 的切片操作非常的优雅!如果你使用过别的语言,就知道我为什么这么说了。
注意:
- 切片的时候,总是开始下标包括,结束下标不包括
-
第一个下标和最后一个下标都可以省略。如果省略第一个下标则默认值是
0
,如果省略第二个下标则默认值是字符串的长度
虽然在使用下标获取单个字符的时候,如果超出范围会抛出异常。
但是在切片的时候,如果越界则不会抛出异常。
字符串的不可变性是指,字符串在内存中一旦创建,则字符串的内容终身无法更改。如果想获取不同的字符串,只能再重新创建一个字符串。
不可变的好处就是,共享而不用担心同步问题。因为大家都不能修改。
所以,通过下标修改字符串中的某个字符是错误,会抛出异常。
如果需要不同的字符串,应该创建一个新的,如下面的代码:
前面学习了 +、*、[]、[:]
运算符可以操作字符串,还有一些其他的运算符也可以操作字符串。
in
测试字符串是否包含这样的子字符串
not in
与 in
的含义相反
%(了解)
格式化字符串。格式化字符串有比较多的格则,与 c 语言的 printf()
的格式化规则一样。
常用的就下面 3 种。
前面学习的一些函数都是内置函数,直接调用即可。
下面再学习几个字符串对象的方法。(实例方法, 后面面向对象再具体详细学习)
需要注意:在下面的方法中, 如果是涉及到修改字符串的,一定是创建了一个新的字符串,并返回。
使用: 字符串.方法(参数)
来调用
-
s.capitalize()
把首字母变换为大写字母,并返回字符串 -
s.lower()
把字符串中的所有字母变小写 -
s.upper()
把字符串中的所有字母变大写 -
s.swapcase()
大小写互换 -
s.title()
标题化 每个单词的首字母大写 -
s.center(w)
把字符串居中,用空格填充两边。
w
是填充后的总长度。如果不想用空格填充,可以传入第二个参数,必须是一个字符。
-
s.isalnum()
如果字符串的长度大于 0 ,并且所有字符都是字母或数字,则返回
True
-
s.isalpha()
如果字符串的长度大于 0 ,并且所有字符都是字母,则返回
True
-
s.isdigit()
如果字符串的长度大于 0 ,并且所有字符都是数字,则返回
True
-
s.islower()
所有字母是否全是小写
-
s.isupper()
所有字母是否全是大写
-
s.istitle()
字符串中每个单词首字母是否大写
-
s.isspace()
是否全是空白字符,并至少有一个字符
-
s.startswith(prefix, start, end)
切片[start, end]范围内是否以prefix开头
-
s.endswith(suffix, start, end)
切片[start, end]范围内是否以suffix结尾
-
s.split(sep, maxsplit)
使用sep
去切割字符串,如果不传入sep
则默认使用 空白字符maxsplit
为最大分割次数 -
s.rsplit(sep, maxsplit)
使用sep
从右侧开始切割字符串,如果不传入sep
则默认使用 空白字符maxsplit
为最大分割次数 -
s.splitelines(keepends)
按照行分割字符串,keepends为bool值,默认为False, 如果为真,保留行分隔符 -
s.join(seq)
把seq代表的序列用s连接起来
-
s.find(str, beg=0, end=len)
方法检测字符串中是否包含子字符串
str
,如果指定beg
(开始) 和end
(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回 -1。 -
s.rfind(str, beg=0, end=len)
从右侧开始检测字符串中是否包含子字符串str
,如果指定beg
(开始) 和end
(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回 -1。 -
s.index(str, beg=0, end=len)
方法检测字符串中是否包含子字符串str
,如果指定beg
(开始) 和end
(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回错误。 -
s.rindex(str, beg=0, end=len)
从右侧开始检测字符串中是否包含子字符串str
,如果指定beg
(开始) 和end
(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回 错误。 -
count(substr, start, end)
计算substr在切片[start,end]范围内出现的次数 -
replace(oldstr, newstr, count)
把oldstr替换为newstr, count为替换次数 -
s.strip([chars])
把字符左右两端的
chars
去掉 。如果不传入参数,默认去除空格。 中间的不去掉。 -
s.lstrip([chars])
s.rstrip([chars])
去掉左边或右边的指定字符,默认是空格
__EOF__