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]