1.列表
1.1列表的定义与创建,访问列表元素
列表list是Python中非常常见的一种数据类型。用一对中括号来表示,中间用逗号隔开。
例如下面的两个列表:
访问列表元素直接用print(列表名)即可打印出一个完整的列表,带 [ ] 符号
#定义一个自行车列表,列表最好是指定一个复数的名称
bicycles=['trek','cannondale','redline','specialized']
print(bicycles)
列表里的内容,我们称之为元素
列表元素可以由多种数据类型组成,同样也可以包含(或称为嵌套)列表
#列表元素可以由多种数据类型组成,同样也可以包含列表
students = ['Bob','Alice','Jim','Mike','Judy',123,True,['a','b']]
print(type(students))
print(students)
1.2列表的索引
在python中,第一个列表元素的索引为0,而不是1(类似数组的下标)
students = ['Bob', 'Alice', 'Jim', 'Mike', 'Judy']
# 索引 0 1 2 3 4
# 负数索引 -5 -4 -3 -2 -1
print(students[0])
python为访问最后一个列表元素提供了一种特殊语法,通过将索引指定为-1,这种语法很有用,因为你经常需要在不知道列表长度的情况下访问最后的元素。这个约定也适用于其他的复数索引,例如索引-2返回倒数第二个列表元素,索引-3返回倒数第三个索引元素,以此类推。
可以像其他变量一样来使用列表中的各个值,例如:
students = ['Bob', 'Alice', 'Jim', 'Mike', 'Judy']
# 索引 0 1 2 3 4
# 负数索引 -5 -4 -3 -2 -1
print('本次考试最高分的学生是:'+students[1].lower())
可以使用字符串的方法改变大小写,只要列表元素类型是字符串:
1.3列表的切片
列表的切片可以用来获取你需要的元素
列表切片的格式:列表名[x:y],从索引 [ x ] 到索引 [ y-1 ]
切片注意点:
1.X:Y是不包含Y的,索引取值是X-->Y-1
2.X: 是从X开始,一直取到最后一个元素
3. :Y是从第一个元素开始,一直取到索引为Y-1
4. : 跟直接print(列表名)没有区别
5. 前面的数字不能比后面大
students = ['Bob', 'Alice', 'Jim', 'Mike', 'Judy']
# 索引 0 1 2 3 4
# 负数索引 -5 -4 -3 -2 -1
print(students[1:4]) #取索引1-3
print(students[4:1]) #前面的数字不能比后面的大
print(students[:]) #跟直接print(列表名)没有区别
print(students[:4]) #从第一个元素开始取到元素索引3
print(students[1:]) #从索引1取到最后一个元素
print(students[:-1]) #从第一个元素一直取到元素索引为-2
print(students[-1:]) #从索引-1元素取到最后一个元素,也就是只取这一个元素
print(students[-1:-4]) #前面的数字不能比后面的大
print(students[-4:-1]) #从索引-4取到索引-2
print(students[0:5]) #从索引0取到索引4
运行结果:
['Alice', 'Jim', 'Mike']
[]
['Bob', 'Alice', 'Jim', 'Mike', 'Judy']
['Bob', 'Alice', 'Jim', 'Mike']
['Alice', 'Jim', 'Mike', 'Judy']
['Bob', 'Alice', 'Jim', 'Mike']
['Judy']
[]
['Alice', 'Jim', 'Mike']
['Bob', 'Alice', 'Jim', 'Mike', 'Judy']
[Finished in 0.2s]
1.4列表的增、删、改、查
1.4.1列表新增
1.在列表末尾添加元素 append()
用append增加元素时,新的元素会增加在列表的最后。
motorcycles=['honda','yamaha','szuki']
motorcycles.append('ducati')
print(motorcycles)
>>>['honda', 'yamaha', 'szuki', 'ducati']
方法append() 让动态地创建列表易如反掌,例如,我们可以先创建一个空列表,再使用一系列的append()语句来添加元素。这种创建列表的方式极其常见,因为经常要等程序运行后,我们才知道用户要在程序中存储哪些数据。
motorcycles=[]
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('szuki')
motorcycles.append('ducati')
motorcycles.append('honda') #列表是允许重复元素出现的
print(motorcycles)
>>>['honda', 'yamaha', 'szuki', 'ducati', 'honda']
2.在列表中插入元素 insert(),insert()有2个参数:第一个参数是要添加元素的下标位置;第二个参数是要添加的元素
使用方法insert()可在列表的任何位置添加新元素,你需要指定新元素的索引和值
motorcycles=['honda','yamaha','szuki']
motorcycles.insert(0,'ducati')
print(motorcycles)
>>>['ducati', 'honda', 'yamaha', 'szuki']
3.把多个元素添加入列表 extend(),也作将列表插入列表
extend()是用列表去拓展列表,而不是直接添加元素,所以“()”中要加上“[ ]”
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['ducati','totyo']) #注意理解成把列表插入列表,放在最后,所以要使用[]符号
print(motorcycles)
>>>['honda', 'yamaha', 'szuki', 'ducati', 'totyo']
1.4.2从列表中删除元素
1.pop通过索引来删除元素
motorcycles=['honda','yamaha','szuki']
motorcycles.append('ducati')
a=motorcycles.pop(0) #可以把pop删除的值保存在变量a中使用
print(motorcycles)
>>>['yamaha', 'szuki', 'ducati']
2.remove通过元素的值来删除元素
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
a=motorcycles.remove('honda') #如果有重复元素,只会删除一个,可以使用变量a保存删除的元素,在后面可以使用它
print(motorcycles)
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati']
['yamaha', 'szuki', 'honda', 'ducati']
如果有重复元素 ,使用remove删除时要注意:
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
'''
for i in motorcycles: #会出现删不干净的问题
if(i=='honda'):
motorcycles.remove(i)
for j in range(len(motorcycles)): #会出现下标越界的问题
if motorcycles[j]=='honda':
motorcycles.remove(motorcycles[j])
'''
while 'honda' in motorcycles: #while循环
motorcycles.remove('honda')
print(motorcycles)
print(list(filter(lambda x: x != 'honda', motorcycles))) #可以使用filter过滤返回新的List
motorcycles = [x for x in motorcycles if x != 'honda'] #列表解析
print(motorcycles)
for item in motorcycles[:]: #遍历拷贝的List,操作原始的List
if item=='honda':
motorcycles.remove(item)
print(motorcycles)
for item in range(len(motorcycles)-1,-1,-1): #倒序循环遍历
if motorcycles[item]=='honda':
del motorcycles[item]
print(motorcycles)
3.使用del语句删除元素
如果知道要删除的元素再列表中的位置,可以使用del来删除元素。注意:使用del删除元素后,你就无法再访问它了,是无法用变量去保存的。
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
del motorcycles[0]
del motorcycles[-1]
print(motorcycles)
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati']
['yamaha', 'szuki', 'honda']
1.4.3修改列表元素
修改列表元素的语法与访问列表元素的语法类似,要修改列表元素,直接通过索引赋值的方式
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
motorcycles[0]='hondada'
motorcycles[-1]='hondada'
print(motorcycles)
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati']
['hondada', 'yamaha', 'szuki', 'honda', 'hondada']
1.4.4列表的查找方法
python中五种查找方式:in、not in、count、index,find,find用于字符串
1.判断值是否在列表中 in
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
print('honda' in motorcycles)
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati']
True
2.判断值是否不在列表中 not in
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
print('yamaha' not in motorcycles) #判断值是否不在列表中,返回True或False
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati']
False
3.统计指定值在列表中从出现的次数 count()
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati'])
print(motorcycles)
print(motorcycles.count('honda')) #统计值在列表中出现的次数,返回次数
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati']
2
4.查看指定值在列表中出现的位置 index()
motorcycles=['honda','yamaha','szuki']
motorcycles.extend(['honda','ducati','yamaha','honda'])
print(motorcycles)
print(motorcycles.index('honda')) #查看值在列表中首次出现的位置
print(motorcycles.index('honda',4,7)) #查看值在列表中索引4-6首次出现的位置,不包含后面一位
print(motorcycles.index('honda',3)) #查看值在列表索引3-最后一位首次出现的位置
print(motorcycles.index('honda',4,)) #查看值在列表索引4-最后一位首次出现的位置
>>>['honda', 'yamaha', 'szuki', 'honda', 'ducati', 'yamaha', 'honda']
0
6
3
6
5.延伸:python list 查找与过滤方法整合
motorcycles=['honda','yamaha','szuki'] motorcycles.extend(['honda','ducati','yamaha','honda']) print(motorcycles) print(motorcycles.index('honda')) #查看值在列表中首次出现的位置 print(motorcycles.index('honda',4,7)) #查看值在列表中索引4-6首次出现的位置 print(motorcycles.index('honda',3)) #查看值在列表索引3-最后一位首次出现的位置 print(motorcycles.index('honda',4,)) #查看值在列表索引4-最后一位首次出现的位置 motorcycles = [x for x in motorcycles if x == 'yamaha'] print(motorcycles) #motorcycles = [x for x in motorcycles if x == 'honda'] #列表解析 print([x for x in motorcycles if 'yamaha' not in x]) >>>['honda', 'yamaha', 'szuki', 'honda', 'ducati', 'yamaha', 'honda'] 0 6 3 6 ['yamaha', 'yamaha'] []
6.find方法用于字符串中查找字符
如果找到则返回第一个匹配的位置,如果没找到则返回-1,而如果通过index方法去查找的话,没找到的话会报错。
str1='abcd1234'
print(str1.find('1'))
>>>4
1.5组织列表
1.5.1使用方法sort()对列表进行永久性排序
sort()方法可以让我们较为轻松的对列表进行排序,让其按照字母顺序排序,其是永久性地修改了列表元素的排列顺序
cars = ['bmw','audi','toyota','subaru']
cars.sort()
print(cars)
>>>['audi', 'bmw', 'subaru', 'toyota']
当并非所有值都是小写的时候,首字母大写的时候,一般会按照首字母大写放前面的规则排序
cars = ['Bmw','audi','Toyota','subaru']
cars.sort()
print(cars)
>>>['Bmw', 'Toyota', 'audi', 'subaru']
我们可以使用lower方法来转换成小写再排序
cars = ['Bmw','audi','Toyota','subaru']
cars.sort()
print(cars)
for i in range(len(cars)):
cars[i]=cars[i].lower()
cars.sort()
print(cars)
>>>['Bmw', 'Toyota', 'audi', 'subaru']
['audi', 'bmw', 'subaru', 'toyota']
1.5.2.按相反的顺序永久性排列列表元素 sort(reverse= True)
cars = ['Bmw','audi','Toyota','subaru']
cars.sort(reverse=True)
print(cars)
>>>['subaru', 'audi', 'Toyota', 'Bmw']
1.5.3.使用函数sorted()对列表进行临时排序
注意使用时有区别,sort是 列表名.sort(),sorted是 sorted(列表名)
cars = ['bmw','audi','toyota','subaru']
print(cars)
print(sorted(cars))
print(cars)
>>>['bmw', 'audi', 'toyota', 'subaru']
['audi', 'bmw', 'subaru', 'toyota']
['bmw', 'audi', 'toyota', 'subaru']
1.5.4.按相反的顺序临时性排序列表sorted(reverse=True)
cars = ['bmw','audi','toyota','subaru']
print(cars)
print(sorted(cars,reverse=True))
print(cars)
>>>['bmw', 'audi', 'toyota', 'subaru']
['toyota', 'subaru', 'bmw', 'audi']
['bmw', 'audi', 'toyota', 'subaru']
1.5.5.倒着打印列表 reverse()
要反转列表元素的排列顺序,可使用方法reverse()
cars = ['bmw','audi','toyota','subaru']
cars.reverse()
print(cars)
>>>['subaru', 'toyota', 'audi', 'bmw']
方法reverse()永久性修改列表的排列顺序,但可以随时恢复原来的排列顺序,再次调用reverse()即可
cars = ['bmw','audi','toyota','subaru']
cars.reverse()
print(cars)
cars.reverse()
print(cars)
>>>['subaru', 'toyota', 'audi', 'bmw']
['bmw', 'audi', 'toyota', 'subaru']
1.5.6.确定列表的长度 len()
使用函数len()可快速获悉列表的长度
cars = ['bmw','audi','toyota','subaru']
print(len(cars))
>>>4
注意避免索引错误
- 索引错误一般出现下标越界,每当需要访问最后一个列表元素时,都可使用复数索引-1,避免下标越界错误。
- 仅当列表为空时,这种访问最后一个元素的方式才会导致错误
cars = []
print(len(cars))
>>>IndexError: list index out of range
1.6数值列表
1.6.1使用函数range()创建数字列表
要创建数字列表,可使用函数list()讲range()的结果直接转换为列表
numbers = list(range(1,6)) #使用range函数时只包含开头的数字,不包含末尾的数字
numbers1 = list(range(0,11,2)) #还可以使用函数range()指定步长
print(numbers)
print(numbers1)
#使用range函数几乎可以创建任何需要的数字集,下面来创建一个列表,包含10以内每个整数的平方
squares=[]
for i in range(10):
squares.append(i**2)
print(squares)
>>>[1, 2, 3, 4, 5]
[0, 2, 4, 6, 8, 10]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1.6.2.对数字列表执行简单的统计计算
min(),max(),sum()函数可以专门用于触理数字列表,分别是找出列表的最小值,最大值,和总和
numbers = list(range(1,6)) #使用range函数时只包含开头的数字,不包含末尾的数字
print(numbers)
print(min(numbers)) #最小值
print(max(numbers)) #最大值
print(sum(numbers)) #列表数字之和
>>>[1, 2, 3, 4, 5]
1
5
15
1.7列表解析
前面介绍的生成列表for循环的方式包含三四行代码,可以使用列表解析一行代码就完成,列表解析让我们只需要编写一行代码就能生成这样的代码。
列表解析 首先指定一个有描述性列表名,然后指定一个左方括号,并定义一个表达式,列表解析有点复杂,之后有时间再来详细了解,这里我们自行理解一下,稍作了解即可
squares = [i**2 for i in range(0,6) if i!= 0] #加判断条件
squares1 = [i**2 for i in range(0,6)] #不加判断条件
print(squares)
print(squares1)
>>>[1, 4, 9, 16, 25]
[0, 1, 4, 9, 16, 25]
1.8使用for遍历列表和列表的切片
遍历列表和遍历列表的部分元素
print(squares)
for value in squares:
print(value)
for i in range(len(squares)):
print(squares[i])
for square in squares[0:3]: #使用for和切片来遍历前三个元素
print(square)
>>>[0, 1, 4, 9, 16, 25]
0
1
4
9
16
25
0
1
4
9
16
25
0
1
4
使用排序遍历列表切片
a = [9,8,7,4,5,6,1,5,2,3]
a.sort() #sort默认从小到大排序
for x in a[0:5]: #切片遍历前五个最小的元素
print(x)
>>>1
2
3
4
5
1.9复制列表
我们经常需要根据现有列表创建一个全新的列表,所以这里来学习复制列表,如果你任务复制列表就是:列表名1=列表名2
那就出错了。
a = [9,8,7,4,5,6,1,5,2,3]
b = a
a.append('a')
b.append('b')
print(a)
print(b)
>>>[9, 8, 7, 4, 5, 6, 1, 5, 2, 3, 'a', 'b']
[9, 8, 7, 4, 5, 6, 1, 5, 2, 3, 'a', 'b']
这种方法最终指向的是同一个列表
使用切片的形式,可以完成复制列表(此时是一个新的列表,可以单独对它进行操作)
a = [9,8,7,4,5,6,1,5,2,3]
b = a[:]
a.append('a')
b.append('b')
print(a)
print(b)
>>>[9, 8, 7, 4, 5, 6, 1, 5, 2, 3, 'a']
[9, 8, 7, 4, 5, 6, 1, 5, 2, 3, 'b']
这个细节可以不用去思考太多,记住列表 使用a=b的形式只会指向同一个列表,不会生成一个新的列表,使用切片生成新的列表,切片里可以包含首尾的数
a = [9,8,7,4,5,6,1,5,2,3]
b = a[0:4]
a.append('a')
b.append('b')
print(a)
print(b)
>>>[9, 8, 7, 4, 5, 6, 1, 5, 2, 3, 'a']
[9, 8, 7, 4, 'b']
2.元组
2.1 元组的定义,和列表的区别
1.Python 的元组与列表类似,不同之处在于元组的元素不能修改。
2.元组使用小括号,列表使用方括号。
3.相比于列表,元组是更简单的数据结构,如果需要存储的一组值再整个生命周期内都不变,可使用元组。
4.元组和列表都有索引和切片操作,但元组并不存在增加,修改和删除
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可,不用逗号也可以
tup1 = ('zy','小红',1234,True)
tup2 = (1,2,3,4,5)
tup3 = 'a','b','c','d','f' #不用括号也可以
print(type(tup1),type(tup2),type(tup3))
print(tup1)
print(tup2)
print(tup3)
>>><class 'tuple'> <class 'tuple'> <class 'tuple'>
('zy', '小红', 1234, True)
(1, 2, 3, 4, 5)
('a', 'b', 'c', 'd', 'f')
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
tup1 = (1) # 不加逗号,类型为整型
tup2 = (1,) # 加上逗号,类型为元组
print(type(tup1),type(tup2))
print(tup1)
print(tup2)
>>><class 'int'> <class 'tuple'>
1
(1,)
元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
2.2元组的访问
tup1 = ('小红','小路',1,2,True)
tup2 = (1,2,3,4,5,6)
print('tup1[0]=',tup1[0]) #使用索引
print('tup2[0:5]=',tup2[0:6]) #使用切片
>>>tup1[0]= 小红
tup2[0:5]= (1, 2, 3, 4, 5, 6)
2.3遍历元组的所有值
tup1 = ('小红','小路',1,2,True)
tup2 = (1,2,3,4,5,6)
for value in tup1:
print(value)
for value in tup2[0:4]:
print(value)
for i in range(len(tup2)):
print(tup2[i])
>>>小红
小路
1
2
True
1
2
3
4
1
2
3
4
5
6
2.4修改元组变量
虽然不能修改元组的元素,但是可以个存储元组的变量赋值(可以重新定义整个元组)
tup1 = ('小红','小路',1,2,True)
tup2 = (1,2,3,4,5,6)
tup2[0] = 7
>>>TypeError: 'tuple' object does not support item assignment
tup2 = (1,2,3,4,5,6)
print(tup2)
tup2 = (7,8,9)
print(tup2)
>>>(1, 2, 3, 4, 5, 6)
(7, 8, 9)
2.5删除整个元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
tup2 = (1,2,3,4,5,6)
print(tup2)
>>>(1, 2, 3, 4, 5, 6)
del tup2
print(tup2)
>>>NameError: name 'tup2' is not defined
2.6将元组中元素赋值给多个变量
将元组中元素赋值给多个变量时,需要数量一致
t=(1,2,3)
# a,b=t ValueError: too many values to unpack (expected 2)
a,b,c = t
print(t)
print(a,b,c)
>>>(1, 2, 3)
1 2 3
2.7元组的类型转换
t=tuple(['a','b']) #把列表转换为元组
t1=tuple('abc') #把字符串转换成元组
l=list(('a','b')) #把元组转换为列表
l1=list('abc') #把字符串转换成列表
print(l)
print(l1)
print(t)
print(t1)
>>>['a', 'b']
['a', 'b', 'c']
('a', 'b')
('a', 'b', 'c')