【Python5】列表和元组

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)

 参考链接:https://segmentfault.com/a/1190000007214571

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 查找与过滤方法整合

https://blog.csdn.net/qq997843911/article/details/93855706?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

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')
发布了57 篇原创文章 · 获赞 19 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/IGGIRing/article/details/105253324