1.序列
序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列,每一个值(称为元素)都分配一个数字,称之索引或位置。通过该索引可以取出相应的值;(在python中内置了5个常用的序列结构:列表,元组,集合,字典和字符串)
1.1索引
序列中的每一个元素都有一个编号,也称为索引。注意这个索引是从0开始递增的。即下标为0表示第一个元素,下标1表示第二个元素。。。。
元素一 | 元素二 | 元素三 | 元素.... | 元素n |
0 1 2 .... n-1 <—索引(下标)
当然索引也可以是负数,这个索引从右向左计数,也就是从最后一个元素开始计数,即最后一个元素的索引值是-1
verse = ["圣安东尼奥马刺","洛杉矶湖人","休斯敦火箭","金州勇士"]
print(verse[2])
print(verse[-1])
输出结果:
休斯敦火箭
金州勇士
1.2 切片
切片操作是访问序列中元素的另一种方法,他可以访问一定范围内的元素。通过切片操作可以生成一个信的序列。其语法格式如下:
sname[start : end : step]
sname:表示序列的名称
start:表示切片的开始位置(包括该位置),如果没有指定,默认就是0
end:表示切片截止位置(不包括),如果没有指定,默认为序列的长度
step:表示切片的步长,如果省略,默认为1。
通俗解释:隔“步长”取值
例子:
nba = ["乔丹","拉塞尔","贾巴尔","张伯伦","约翰逊","科比","邓肯","詹姆斯","拉里·伯德","奥尼尔"]
print(nba[1:5])
print(nba[0:5:2])
输出结果是啥?
1.3序列相加
使用(+)运算符实现。说白了就是“拼接”
例如:
nba1 = ["乔丹","拉塞尔","贾巴尔","张伯伦","约翰逊","科比","邓肯","詹姆斯","拉里·伯德","奥尼尔"]
nba2 = ["库里","汤普森","吉诺比利","杜兰特","姚明"]
print(nba1+nba2)
运行结果:
['乔丹', '拉塞尔', '贾巴尔', '张伯伦', '约翰逊', '科比', '邓肯', '詹姆斯', '拉里·伯德', '奥尼尔', '库里', '汤普森', '吉诺比利', '杜兰特', '姚明']
注意:不能是列表和元组相加,或者是列表和字符串相加!
1.4乘法(Multiplying)
在python中,使用数字n乘以一个序列会生成新的序列。新序列的内容为原来序列被重复n次的结果。
例如:
phone = ["HuaweiMate 30","vivo x21"]
print(phone * 3)
运行结果:
['HuaweiMate 30', 'vivo x21', 'HuaweiMate 30', 'vivo x21', 'HuaweiMate 30', 'vivo x21']
1.5检查某个元素是否是序列的成员(元素)
在python中,可以使用in关键字检查某个元素是否是序列的成员。语法格式如下:
value in sequence
其中,value表示要检查的元素,sequence表示指定的序列。
例如:
nba = ["库里","汤普森","吉诺比利","杜兰特","姚明"]
print("姚明"in nba)
运行结果:Ture
另外,也可以使用 not in 关键字实现检查某个元素是否不包含在指定的序列中。例如:
nba = ["库里","汤普森","吉诺比利","杜兰特","姚明"]
print("姚明" not in nba)
运行结果:False
1.6计算序列的长度/最大值和最小值
使用len()函数计算序列的长度;使用max()函数返回序列中最大的元素;使用min()函数返回序列中最小的元素。
例如:
num = [7,14,21,28,35,42,49,56,63]
print("序列num的长度为:", len(num))
print("序列",num,"中最大值为",max(num))
print("序列",num,"中最小值为",min(num))
运行结果:
序列num的长度为: 9
序列 [7, 14, 21, 28, 35, 42, 49, 56, 63] 中最大值为 63
序列 [7, 14, 21, 28, 35, 42, 49, 56, 63] 中最小值为 7
2.列表
它是python中内置的可变序列。
2.1列表的创建和删除
2.1.1使用赋值运算符直接创建列表,其语法格式如下:
listname = [element 1 , element 2 , element 3 , ..... ,element n]
listname表示列表名称;element 表示列表中的元素
2.1.2创建空列表
emptylist = []
2.1.3创建数值列表
特别说明:在python中,可以使用list()函数直接将range()函数循环出来的结果转换为列表;其基本语法:
list(data)
其中data表示可以转换为列表的数据,其类型可以是range对象/字符串/元组或者其他可迭代类型的数据。
例如:创建一个10~20之间(不包括20)所有偶数的列表;
IDLE代码可以这样写
list(range(10, 20, 2))
pycharm只能这样写
list = list(range(10, 20, 2))
print(list)
运行结果:
[10, 12, 14, 16, 18]
2.1.4 删除列表
可以使用del语句将其删除。语法如下:
del listname
其中listname为要删除列表的名称
其实呀,python中是可以自动销毁不用的列表。原则上是不需要我们自己删除的。
2.2 访问列表元素
可以直接用print函数。这也是为什么上面的代码在IDIE和PyCharm中代码不一样的原因。
2.3遍历列表
2.3.1使用for循环进行遍历;其语法格式如下:
for item in listname
其中,item用于保存获取到的元素值,要输出元素内容时,直接输出该变量就行了;listname为列表名称
例如:
print("2018年俄罗斯世界杯四强:")
team = ["法国","比利时","英格兰","克罗地亚"]
for iteam in team:
print(iteam)
运行结果:
2018年俄罗斯世界杯四强:
法国
比利时
英格兰
克罗地亚
2.3.2使用for循环和enumerate()函数实现
语法格式如下:
for index,item enmumerate(listname):
其中:
index:用于保存元素的索引
item:用于保存获取到到元素值,要输出元素内容时,直接输出该变量即可
listname:为列表名称
例如:
print("2018年俄罗斯世界杯四强:")
team = ["法国","比利时","英格兰","克罗地亚"]
for index,iteam in enumerate(team):
print(index + 1,iteam)
运行结果:
2018年俄罗斯世界杯四强:
1 法国
2 比利时
3 英格兰
4 克罗地亚
2.4添加/修改和删除列表元素
2.4.1添加元素
前面说过通过拼接的方式实现列表的添加数据,其实还有种方法快速实现,那就是append();其用法如下:
listname.append(obj)
其中listname为列表名称;obj为要添加到末尾到对象。
例如:
phone = ["摩托罗拉","诺基亚","三星","OPPO"]
phone.append("iphone")
print(phone)
运行结果:
['摩托罗拉', '诺基亚', '三星', 'OPPO', 'iphone']
其实还有一种方式那就是insert(),这种方式没有append执行效率高,但他可以在任何位置添加元素。
另外如果将一个列表中但全部原色添加到另一个列表中。可以使用列表对象extend()方法实现,其语法如下:
listname.extend(seq)
listname为原列表,seq为要添加但列表。语句执行后,将seq的内容追加到listname后面
2.4.2 修改元素
修改列表中的元素其实只要通过索引获取该元素,然后再为其重新赋值即可。
例如:
verse = ["德国队小组赛回家","西班牙传控打法还有未来吗","C罗一个人对抗西班牙"]
verse[2]="梅西,c罗相约回家" #修改列表的第三个元素
print(verse)
运行结果:
['德国队小组赛回家', '西班牙传控打法还有未来吗', '梅西,c罗相约回家']
2.4.3删除元素
删除元素主要有两种情况:一种是根据索引删除,另一种是根据元素值进行删除。
a,根据索引删除
删除列表中的指定元素和删除列表类似,也可以使用del语句实现。所不同的是在指定列表名称时,换为列表元素。
例如:
verse = ["德国队小组赛回家","西班牙传控打法还有未来吗","C罗一个人对抗西班牙"]
del verse[-1] #删除列表的第三个元素
print(verse)
运行结果:
['德国队小组赛回家', '西班牙传控打法还有未来吗']
b,根据元素值删除
如果想要删除一个不确定其位置的元素(根据元素值删除),可以使用列表对象的remove()方法实现。
例如:
verse = ["德国队小组赛回家","西班牙传控打法还有未来吗","C罗一个人对抗西班牙"]
verse.remove("内马尔喊话梅罗:等等我!")
print(verse)
运行结果:
Traceback (most recent call last):
File "/Users/zhangjianyu/PycharmProjects/pythonProject/rain_test/day1.py", line 44, in <module>
verse.remove("内马尔喊话梅罗:等等我!")
ValueError: list.remove(x): x not in list
这是为什么呢?其原因是指定的元素不存在,所以在使用remove方法删除元素前,最好先判断该元素是否存在,改进后代码如下:
verse = ["德国队小组赛回家","西班牙传控打法还有未来吗","C罗一个人对抗西班牙"]
value = "德国队小组赛回家" #指定要删除的元素
if verse.count(value)>0: #判断要删除的元素是否存在
verse.remove(value) #删除指定的元素
print(verse)
运行结果:
['西班牙传控打法还有未来吗', 'C罗一个人对抗西班牙']
2.5对列表进行统计计算
python的列表提供了内置的一些函数实现统计/计算方面的功能
2.5.1 获取指定元素出现的次数
使用列表对象的cuont()方法可以获取指定元素在列表中的出现次数,其语法如下:
listname.count(obj)
其中:listname:表示列表的名称;
obj:表示要判断是否存在的对象,这里只能进行精确匹配,也就是说不能是元素的一部分。
返回值:元素在列表中出现的次数
例如:
player = ["莫德里奇","梅西","C罗","苏亚雷斯","内马尔","格列兹曼","莫德里奇"]
num = player.count("莫德里奇")
print(num)
运行结果:
2
2.5.2获取指定元素首次出现的下标
使用列表对象的index()方法可以获取指定元素在列表中首次出现的位置(即索引)。语法格式如下:
listname.index(obj)
其中:listname:表示列表名称
obj:表示要查找的对象,这里同样只能进行精确匹配。如果指定的对象不存在,则抛出异常
返回值:首次出现的索引值
例如:
player = ["莫德里奇","梅西","C罗","苏亚雷斯","内马尔","格列兹曼","莫德里奇"]
position = player.index("莫德里奇")
print(position)
运行结果:
0
2.5.3统计数值列表的元素和
在python中,提供了sum()函数用于统计数值列表中各元素和。语法如下:
sum(listname)
例如:
grade = [98,99,97,100,100,96,94,89,95,100]
total = sum(grade)
print("python理论总成绩为:",total)
运行结果:
python理论总成绩为: 968
此外还有什么方法可以实现列表的求和计算?
2.6对列表进行排序
python中提供了两种常用对对列表进行排序方法:使用列表对象对sort()方法和使用内置对sorted()函数。
2.6.1 使用列表对象对sort()方法实现
列表对象提供了sort()方法用于对原列表中对元素进行排序。排序后原列表中对元素顺序将发生改变。语法格式如下:
listname.sort(key=None,reverse=False)
参数说明:
listname:表示要进行排序对列表
key:表示指定一个从每个列表元素中提取一个用于比较对键(eg:设置key=str.lower,表示在排序时不区分字母大小写)
reverse:可选参数,如果将其指定为Ture,则表示降序排列,如果False,则表示升序排列。默认升序排列
例如:
grade = [98,99,97,100,100,96,94,89,95,100]
print("原列表:",grade)
grade.sort()
print("升序:",grade)
grade.sort(reverse=True)
print("降序:",grade)
运行结果:
原列表: [98, 99, 97, 100, 100, 96, 94, 89, 95, 100]
升序: [89, 94, 95, 96, 97, 98, 99, 100, 100, 100]
降序: [100, 100, 100, 99, 98, 97, 96, 95, 94, 89]
注意:使用sort()方法进行数值列表的排列比较简单,但是使用sort()方法对字符串列表进行排列时,采用对规则时先对大写字母排序,然后再对小写字母排序。如果想要对字符串列表进行排序(不区分大小写时),需要指定其key参数。
例如:
char = ["cat","Tom","Angela","pet"]
char.sort()
print("区分字母大小写:",char)
char.sort(key=str.lower)
print("不区分字母大小写:",char)
运行结果:
区分字母大小写: ['Angela', 'Tom', 'cat', 'pet']
不区分字母大小写: ['Angela', 'cat', 'pet', 'Tom']
2.6.2 使用内置的sorted()函数实现
语法格式如下:
sorted(listname,key=None,reverse=False)
参数说明:
listname:表示要进行排序的列表名称
key:表示指定一个从每个列表元素中提取一个用于比较的键(例如:设置key=str.lower,表示在排序时不区分字母大小写)
reverse:可选参数,如果将其值指定为Ture,则表示降序排列。如果False,则表示升序排列。默认升序排列
例如:
grade = [98,99,97,100,100,96,94,89,95,100]
grade_as = sorted(grade) #进行升序排列
print("升序:",grade_as)
grade_des = sorted(grade,reverse=True)
print("降序:",grade_des)
运行结果:
升序: [89, 94, 95, 96, 97, 98, 99, 100, 100, 100]
降序: [100, 100, 100, 99, 98, 97, 96, 95, 94, 89]
说明:列表对象sort()方法和内置storted()函数的作用基本相同,所不同的就是使用sort()方法时,会改变原列表原色排列顺序,而使用storted()函数时,会建立一个原列表的副本,该副本为排列后的列表。
2.7 列表推导式
a,生成指定范围的数值列表,语法格式如下
list = [Expression for var in range]
参数说明:
list:表示生成的列表名称
Expression:表达式,用于计算新列表的元素
var:循环变量
range:采用range()函数生成的range对象
例如:
import random
randomnumber = [random.randint(10,100)for i in range(10)]
print("生成的随机数为:",randomnumber)
b,根据列表生成指定需求的列表,语法格式:
newlist = [Expression for var in list]
参数说明:
newlist:表示新生成的列表名称
Expression:表达式,用于计算新列表的元素
var:循环变量
list:用于生成新列表的原列表
例如:
price = [1200,5330,2988,6200,1998,8888]
sale = [int(i * 0.5) for i in price]
print("原价格:",price)
print("打五折打价格:",sale)
运行结果:
原价格: [1200, 5330, 2988, 6200, 1998, 8888]
打五折打价格: [600, 2665, 1494, 3100, 999, 4444]
c,从列表中选择符合条件的元素组成新的列表。语法格式如下:
newlist = [Expression for var in if condition]
参数说明:
newlist:表示新生成的列表名称
Expression:表达式,用于计算新列表的元素
var:循环变量
list:用于生成新列表的原列表
condition:条件表达式,用于指定筛选条件
例如:
price = [1200,5330,2988,6200,1998,8888]
sale = [x for x in price if x > 5000]
print("原价格:",price)
print("价格高于5000的:",sale)
运行结果:
原价格: [1200, 5330, 2988, 6200, 1998, 8888]
价格高于5000的: [5330, 6200, 8888]