20180626_基本数据类型之字符串

1. 6种基本数据类型

在Python中有6种基本的数据类型,分别是:

字符串数字列表元祖字典集合

2. 可变数据和不可变数据

按照数据是否可变,可以分为可变数据不可变数据,所谓可变数据,是指数据的展示形式、内容可变,但仍是同一个数据,比如:集合{'Alex', 21, 'shanshan', 20}{21, 'Alex', 'shanshan', 20}为同一个集合。列表['Alex', 21, 'shanshan'],增加一个元素20后变成['Alex', 21, 'shanshan', '20']。虽然列表中的元素增加了,但是列表仍然为同一个列表。

6种基本数据类型按是否为可变数据可如下分类:

分类标准 数据类型
不可变数据 String(字符串)、Number(数字)、Tuple(元组)
可变数据 List(列表)、Dictionary(字典)、Sets(集合)

在后期学习时,有些数据要求是不可变数据类型。比如字典的键(Keys),要求是不可变数据类型。

3. 字符串

在Python中,用一对'"或者'''括起来的内容即为字符串。

其中'"作用相同,用于单行字符串;'''用于多行字符串。在字符串中需要显示'"时,可以用"'在最外层将字符串括起来,也可以使用转义符\转义。比如:

'"作用一样:

string1 = 'I love Python.'
string2 = "I love Python."
print(string1)
print(string2)

输出结果:

image.png

在字符串中显示'或者"

string1 = '我是“王老五”。'
string2 = "I'am a oldboy."
string3 = 'I\'am a oldboy.'
print(string1)
print(string2)
print(string3)

输出结果:

image.png

显示多行字符串:

string1 = '''
我是“王老五”。
I am an old boy.
'''
print(string1)

输出结果:

image.png

在写Python代码时,应该遵守PEP 8代码编写风格,每一行字符不宜过多,既不方便读,也不方便写。如果该行字符过多,可以用\来在下一行延续你的代码。比如:

with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

4. 索引与切片

Python会对一些有序数据进行排序,比如字符串、列表、元祖。排序的方法有两种,一种是从左往右递增排序,起始序号为0;另一种是从右往左递减排序,起始序号为-1。

Python中的两种序号体系:

  • 正向递增序号
  • 反向递减序号

字符串、列表、元祖的索引和切片都是基于这两种序号体系进行。

4.1. 索引

索引的方法是在变量的后面用[]将需要索引的内容的序号括起来。比如:

string1 = 'I love Python'

其索引序号如图所示。

image.png

如果要索引字母v,方法如下:

# 用正向序号索引
string1[4]
# 用反向序号索引
string1[-9]

4.2. 切片

切片时,采用[M:N]格式,表示被切片对象(如字符串)中从M到N(不包含N)的元素。其中M、N为字符串的索引序号,可以混合使用正向递增序号和反向递减序号,但是要确保切片是从左往右切。比如:切取字符串string1的ve Pyt部分

# 用正向索引切片
string1[4:10]
# 用反向索引切片
string1[-9:-3]
# 混合使用索引序号切片
string1[4:-3]
string1[-9:10]

5. 字符串运算

5.1. 字符串连接(+)

通过相加的形式可以将两个字符串链接在一起。比如:

string1 = 'abc'
string2 = 'def'
string3 = string1 + string2
print(string3)

输出结果为:'abcdef'。如图所示。

image.png

5.2. 字符串重复(*)

利用相乘的形式,可以重复输出字符串。比如:

string1 = 'abc'
string2 = string1 * 3

输出结果为:'abcabcabc'。如图所示。

image.png

6. 格式化字符串

格式化字符串的方法有两种,分别为:

  • 使用字符串格式符
  • 使用format()函数

6.1. 使用字符串格式符格式化

字符串格式化符号:

符号 描述
%s 格式化字符串
%d 格式化整数
%f 格式化浮点数,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 用科学计数法格式化浮点数
%u 格式化无符号整形
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数
%g %f和%e的简写
%G %f和%E的简写
%p 用十六进制数格式化变量的地址

以常用的%s%d为例:

name = 'Alex'
old_year = 21
print('%s的年龄是:%d' % (name, old_year))

6.2. 使用format()函数格式化

name = 'Alex'
old_year = 21
print('{1:-^20}的年龄是:{0:}'.format( old_year, name))

上述代码中,{}称为槽,在槽内可以指定字符串的格式控制信息,比如1:-^20,槽的内部样式如下:

{<参数序号>:<格式控制标记>}

其中,格式控制标记用来控制参数显示时的格式,格式内容如下:

0 填充 对齐 宽度 精度 类型
参数序号 引导符 用于填充的单个字符 <左对齐(默认)^居中对齐>右对齐 槽的宽度 数字的千位分隔符 小数点精度或字符串最大输出长度 指定数据类型。整形:b,c,d,o,x,X ;浮点型:e,E,f,%

使用时,可以省略参数序号,format()的参数默认使用位置参数。此时槽排列顺序和位置参数的排列顺序一一对应,比如第一个{}默认应该对应的就是old_year参数。但是因为在槽里面指定了参数序号,因此,该槽对应的是第二个参数,即name

或者可以向字典一样使用键值对映射。比如:

print('{name:-^20}的年龄是:{old_year:}'.format( old_year = 21, name = 'Alex'))

7. 变量命名

Python中的变量不需要声明,但是需要赋值(用赋值符号=赋值),只有为变量赋值后,该变量才会被创建。另外,在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。比如:

string1 = 'I love Python'
num1 = 21

等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

=是赋值符号,用于给变量赋值;==是判断符号,判断其左右两边的值是否相等。

7.1. Python语言33个保留字

1 2 3 4 5
from import as if elif
else for in is not
while and or continue break
pass def return try except
True False None class del
with global finally lambda nonlocal
raise yield assert

不难发现,大部分都是Python导入模块语句、循环语句、条件语句等语法

7.2. 变量命名规范

  1. 变量命名时不能使用Python中的保留字
  2. 变量只能使用字母、数字、下划线命名
  3. 变量命名时大小写敏感,比如nameName不是同一个变量名
  4. 不能以数字开头

7.3. 变量命名习惯

  • 驼峰体
  • 下划线

7.3.1. 驼峰体

每个单词的首字母大写。比如:

AgeOfOldboy = 56
NumberOfStudents = 80

7.3.2. 下划线

使用下划线分隔每个单词,Python官方推荐使用下划线方式命名。比如:

age_of_oldboy = 56
number_of_students = 80

推荐类名用 驼峰命名, 函数和方法名用 小写_和_下划线

变量命名时,要显得专业点需要注意以下几个问题:

  • 避免变量名为中文、拼音
  • 变量名过长
  • 词不达意

变量命名建议使用英文单词命名,便于维护代码时见名思意。

在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量。

8. 字符串内建函数

序号 方法 描述
1 len(string) 返回字符串长度
2 index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在字符串中会报一个异常.
3 rindex( str, beg=0, end=len(string)) 类似于 index(),不过是从右边开始.
4 find(str, beg=0 end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
5 rfind(str, beg=0,end=len(string)) 类似于 find()函数,不过是从右边开始查找.
6 lstrip() 截掉字符串左边的空格或指定字符。
7 rstrip() 删除字符串字符串末尾的空格.
8 strip([chars]) 在字符串上执行 lstrip()和 rstrip()
9 split(str="", num=string.count(str)) num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串
10 splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
11 join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
12 startswith(str, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
13 endswith(suffix, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
14 lower() 转换字符串中所有大写字符为小写.
15 upper() 转换字符串中的小写字母为大写
16 title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
17 swapcase() 将字符串中大写转换为小写,小写转换为大写
18 replace(old, new [, max]) 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
19 max(str) 返回字符串 str 中最大的字母。
20 min(str) 返回字符串 str 中最小的字母。
21 center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
22 isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False。
23 isdigit() 如果字符串只包含数字则返回 True 否则返回 False。
24 isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
25 islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
26 isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
27 istitle() 如果字符串是标题化的(见 title())则返回 True,否则返回 False
28 isspace() 如果字符串中只包含空白,则返回 True,否则返回 False.
  • 由于本人使用的是Windows 10系统的电脑,所以笔记中提到的操作、设置都是在Windows系统下进行。
  • 本人正在Python学习的路上努力,笔记中难免会有一些错误之处,还请各位老师多批评指正。

推荐阅读更多精彩内容