一、序列概述
1.序列结构主要有:列表、元组、集合、字典、字符串
其中,集合和字典不支持索引、切片和相乘操作
2.切片
访问序列中一定范围的元素
sname[start : end : step]
参数说明:
- sname:序列名称
- start:不指定则默认为0
- end:不指定则默认为序列的长度
- step:步长,若省略则默认为1
注:若要复制整个序列,中间冒号保留,如verse[:]
3.序列相加
使用“+”将相同类型的序列进行连接,但不去除重复的元素
num1 = [1,2,3]
num2 = [one,tow]
print(num1 + num2) #>>>[1,2,3,one,tow]
注:相同类型指同为列表、元组、字符串等,序列中的元素类型可以不同
num1 = [1,2,3]
print(num + "输出其和") #错误
4.乘法
num = [1,2,3]
print(num * 2) #>>>[1,2,3,1,2,3]
enmpty = [None] * 3
print(empty) #>>>[None,None,None]
5.检查某个元素是否是序列的成员 in/not in
语法:value in
value即要检查的元素,sequence即指定的序列
返回值:True / False
6.计算序列的长度、最大值和最小值
长度:len()
最大值:max()
最小值:min()
其他内置函数:
- list()
- str()
- sum() 计算元素和
- sorted() 对元素进行排序
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象(iterable)进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
list.sort() list = sorted()
语法: sorted(iterable, key=None, reverse=False)
参数说明:
- iterable -- 可迭代对象。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。如,设置“key = str.lower”表示在排序时不区分字母大小写
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
返回重新排序的列表。
sorted([5, 2, 3, 1, 4])
#>>>[1, 2, 3, 4, 5] # 默认为升序
#也可以使用 list 的 list.sort() 方法。这个方法会修改原始的 list(返回值为None)。通常这个方法
#不如sorted()方便-如果不需要原始的 list,list.sort()方法效率会稍微高一些。
a=[5,2,3,1,4]
a.sort()
print(a)
#>>>[1,2,3,4,5]
#利用key进行倒序排序
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
result_list = sorted(example_list, key=lambda x: x*-1)
print(result_list)
#>>>[7, 6, 5, 4, 3, 2, 1, 0]
#要进行反向排序,也通过传入第三个参数 reverse=True:
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
sorted(example_list, reverse=True)
#>>>[7, 6, 5, 4, 3, 2, 1, 0]
注:用 lambda 来创建匿名函数:
lambda [arg1 [,arg2,.....argn]]:expression
sum = lambda num1, num2: num1 + num2
# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )
#>>>相加后的值为 : 30
#>>>相加后的值为 : 40
- reversed() 反序序列中的元素
# 字符串
seqString = 'Runoob'
print(list(reversed(seqString)))
# 元组
seqTuple = ('R', 'u', 'n', 'o', 'o', 'b')
print(list(reversed(seqTuple)))
# range
seqRange = range(5, 9)
print(list(reversed(seqRange)))
# 列表
seqList = [1, 2, 4, 3, 5]
print(list(reversed(seqList)))
#>>>['b', 'o', 'o', 'n', 'u', 'R']
#>>>['b', 'o', 'o', 'n', 'u', 'R']
#>>>[8, 7, 6, 5]
#>>>[5, 3, 4, 2, 1]
- enumerate() 将序列组合为一个索引序列,同时列出数据和数据下标,多用在for循环中
enumerate(sequence, [start=0]) start -- 下标起始位置
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
#普通的 for 循环
i = 0
seq = ['one', 'two', 'three']
for element in seq:
print(i, seq[i])
i += 1
#>>>0 one
#>>>1 two
#>>>2 three
#for 循环使用 enumerate
seq = ['one', 'two', 'three']
for i, element in enumerate(seq): # i为索引,element为元素值,seq为序列名称
print(i, element)
#>>>0 one
#>>>1 two
#>>>2 three
二、列表
三、元组、字典、集合
四、字符串
1.字符串编码?
1.1背景信息
ASCLL码:仅对10个数字、26个大写英文字母、26个小写英文字母,以及一些其他符号进行了编码;(美国标准信息交换码,最早的字符串编码)
GBK、GB2312:是我国制定的中文编码标准,1个字节表示英文字母,2个字节表示中文字符
UTF-8:国际通用编码,1个字节表示英文字母,3个字节表示中文
在Python中,有两种常用的字符串类型,分别为str 和bytes 。其中,str表示Unicode字符(ASCLL或者其他);bytes表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在一起用。通常情况下,str在内存中一Unicode表示,一个字符对应若干个字节。但是如果在网络上传输,或者保存在磁盘上,就需把str转换为字节类型即bytes类型。
1.2使用encode()方法编码
用于将字符串转换为二进制数据(即bytes),也称“编码”
语法:str.encode([encoding = "utf-8"][,errors = "strict"])
str:要进行转换的字符串
encoding = "utf-8" :可选参数,用于指定进行转码时采用的字符编码,默认为UTF-8
errors = "strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(默认)(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等
1.3使用decode()方法解码
decode()用于将二进制数据转换为字符串,也称“解码”
bytes.decode([encoding = "utf-8"][,errors = "strict"])
2.字符串常用操作
2.1拼接字符串 “+”
中间不会留空格,相同类型拼接
2.2计算字符串的长度
len(string)
str1 = '人生苦短,我用Python!'
len1 = len(str1) #包括“,”、“!”
len2 = len(str1.encode()) #计算UTF-8编码的字符串的长度
print(len1) #>>>14
print(len2) #>>>28 汉字加中文标点符号共7个,占21个字节,英文字母和英文标点符号占7个字节
2.3截取字符串
2.4分割、合并字符串
- 2.4.1分割字符串:split()方法--把一个字符串按照指定的分隔符切分为字符串列表
语法:str.split(sep,maxsplit)
sep:用于指定分隔符,可以包含多个字符,默认为None,即所有空字符(包括空格、换行符“\n”、制表符“\t”等)
maxsplit:可选参数,用于指定分割的次数,若不指定或者为-1,则分割次数没有限制,否则返回结果列表的元素个数最多为maxsplit+1
注:若不指定sep,那么也不能指定maxsplit参数
str1 = "我 的 目 标 是 卷 王 >>> kuai.le.xue.xi"
print("原字符串:",str1)
list1 = str1.split() #采用默认分隔符进行分割
list2 = str1.split(">>>") #采用多个字符进行分割
list3 = str1.split(".") #采用“.”号进行分割
list4 = str1.split(" ",4) #采用空格进行分割,并且只分割前4个
print(str(list1)+"\n"+str(list2)+"\n"+str(list3)+"\n"+str(list4))
"""
原字符串: 我 的 目 标 是 卷 王 >>> kuai.le.xue.xi
['我', '的', '目', '标', '是', '卷', '王', '>>>', 'kuai.le.xue.xi']
['我 的 目 标 是 卷 王 ', ' kuai.le.xue.xi']
['我 的 目 标 是 卷 王 >>> kuai', 'le', 'xue', 'xi']
['我', '的', '目', '标', '是 卷 王 >>> kuai.le.xue.xi']
"""
- 2.4.2合并字符串:join()方法
语法:newstr = string.join(iterable)
将string加入到iterable后面
str1 = "我的目标是卷王 "
newstr = "@".join(str1)
print(newstr) #>>>我@的@目@标@是@卷@王@
2.5检索字符串
- 2.5.1 count()方法--用于检索指定字符串在另一个字符串中出现的次数
语法:str.count(sub[,start[,end]])
str :原字符串
sub: 要检索的子字符串
start:起始位置的索引;end:结束位置的索引
str1 = "我的目标是卷王 "
newstr = "@".join(str1)
print(newstr) #>>>我@的@目@标@是@卷@王@
print(newstr.count("@") #>>>7
print("字符串@符号首次出现的位置索引是:",newstr.find("@"))
#>>>字符串@符号首次出现的位置索引是:1
print("判断字符串是否以@符号开头:",newstr.startswith("@"))
#>>>判断字符串是否以@符号开头:False
- 2.5.2 find()方法--检索是否包含指定的子字符串。若检索的字符串不存在则返回-1,否则返回首次出现该子字符串的索引
str.find(sub[,start[,end]])
注:若只想判断指定的字符串是否存在,则用关键字“in”。如:print("@"innewstr),若存在就返回True,否则返回False
- 2.5.3 index()方法--与find()方法相似。只不过使用index()方法,当指定的字符串不存在时会抛出异常。
语法:str.index(sub[,start[,end]])
注:rindex()方法,作用与index()方法相似,只不过从右边开始查找
- 2.5.4 startswith()方法--用于检索字符串是否以指定字符串开头。返回值为True/False
语法:str.startswith(sub[,start[,end]])
- 2.5.5 endswith()方法--用于检索字符串是否以指定字符串结尾。返回值为True/False
语法:str.endswith(sub[,start[,end]])
2.6字母的大小写转换
str.lower() ABC --> abc
str.upper() abc --> ABC
2.7去除字符串中的空格和特殊字符
这里的特殊字符是指制表符\t、回车符\r、换行符\n等
- 2.7.1 strip()方法--用于去掉字符串左右两侧的空格和特殊字符
语法:str.strip([chars])
chars: 可选参数,用于指定要去除的字符,可以指定多个
str1 = " .@我爱卷.@.@. \n\r"
print(str1.strip()) #>>>.@我爱卷.@.@. 去除字符串首尾的空格和特殊字符
print(str1.strip(".")) #>>> .@我爱卷.@.@. 注:字符串首是一个空格
str2 = ".@我爱卷.@.@."
print(str2.strip(".")) #>>>@我爱卷.@.@
- 2.7.2 lstrip()方法--用于去掉字符串左侧的空格和特殊字符
语法:str.lstrip([chars])
- 2.7.3 rstrip()方法--用于去掉字符串右侧的空格和特殊字符
语法:str.rstrip([chars])
2.8格式化字符串
- 2.8.1 使用%操作符
语法:"%[-][+][0][m][.n]格式化字符"%exp
参数说明:
- :可选参数,用于指定左对齐,正数2,负数-2(例子啊!)
+ :可选参数,用于指定右对齐,正数+2,负数-2
0 :可选参数,表示右对齐,正数+2,负数-2,用0填充空白处(一般与m参数一起使用)
m :可选参数,表示占有宽度
.n : 可选参数,表示小数点后保留的位数
格式化字符:用于指定类型,其值如下:
%s --字符串(采用str()显示) %r -- 字符串(采用repr()显示) %c -- 单个字符
%o -- 八进制整数 %d或者%i -- 十进制整数 %e / %E -- 指数(基底写e/E)
%x -- 十六进制整数 %f / %F -- 浮点数 %% -- 字符%
exp : 要转换的项
tem = "编号:%09d\t公司名称: %s\t官网: http://www.%s.com" #定义模板
contex = (7,"百度","baidu")
print(tem % contex)
#>>>编号:000000007 公司名称: 百度 官网: http://www.baidu.com
#注:09代表右对齐,用0填充空白处,占位9个宽度 d表示%d,十进制整数 \t制表符
- 2.8.2 使用字符串对象的format()方法
语法:str.format(args)
str 用于指定字符串的显示样式(模板)用“{}”和“:”指定占位符,
格式:
{[index][:[[fill]align][sign][#][width][.precision][type]]}
index : 可选参数,索引位置
fill:可选参数,用于指定空白处填充的字符
align:可选参数,用于指定对齐方式(值为“<”表示内容左对齐;“>”表示内容右对齐;“=”表示内容右对齐,将符号放在内容的最左侧,且只对数字类型有效;“^”表示内容居中对齐),需要配合width一起使用
sign:可选参数,用于指定有无符号数(值为“+”表示+2,-2;值为“-”表示2,-2;值为空格表示正数加空格,负数加负号)(这的2是举的例子)
#:可选参数,对于二、八、十六进制,若加上#表示会显示0b/0o/0x前缀,否则不显示
width:可选参数,表示占有宽度
.precision:可选参数,用于指定小数点后保留的位数
type:可选参数,用于指定类型,其值如下:
S -- 对字符串类型格式化 b -- 将十进制-->二进制表示再格式化
D -- 十进制整数 o -- 将十进制-->八进制表示再格式化
C -- 将十进制-->Unicode字符 x / X -- 将十进制-->十六进制表示再格式化
e / E -- 转换为科学计数法表示再格式化 f / F -- 转换为浮点数表示再格式化
g / G --自动在e和f或者E和F中切换 % -- 显示百分比
args用于指定要转换的项